Annotation of ntddk/inc/winddi.h, revision 1.1

1.1     ! root        1: /*++ BUILD Version: 0001
        !             2: 
        !             3: Copyright (c) 1985-91, Microsoft Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:     winddi.h
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     Private entry points, defines and types for NTWIN DDI.
        !            12: 
        !            13: --*/
        !            14: 
        !            15: #ifndef _WINDDI_
        !            16: #define _WINDDI_
        !            17: 
        !            18: 
        !            19: typedef ULONG FLONG;
        !            20: typedef USHORT FSHORT;
        !            21: typedef BYTE    FBYTE;
        !            22: typedef ptrdiff_t PTRDIFF;
        !            23: typedef PTRDIFF    *PPTRDIFF;
        !            24: typedef size_t SIZE_T;
        !            25: typedef int (*PFN)();
        !            26: typedef LONG FIX;
        !            27: typedef FIX     *PFIX;
        !            28: typedef ULONG ROP4;
        !            29: typedef ULONG MIX;
        !            30: 
        !            31: typedef WCHAR *PWSZ;     // pwsz, 0x0000 terminated UNICODE strings only
        !            32: typedef CONST WCHAR *PCWSZ;      // pwsz, 0x0000 terminated UNICODE strings only
        !            33: 
        !            34: typedef ULONG HGLYPH;
        !            35: typedef HGLYPH *PHGLYPH;
        !            36: #define HGLYPH_INVALID ((HGLYPH)-1)
        !            37: 
        !            38: typedef ULONG           IDENT;
        !            39: 
        !            40: 
        !            41: typedef struct _POINTE      /* pte  */
        !            42: {
        !            43:     FLOAT x;
        !            44:     FLOAT y;
        !            45: } POINTE, *PPOINTE;
        !            46: 
        !            47: typedef union _FLOAT_LONG
        !            48: {
        !            49:    FLOAT   e;
        !            50:    LONG    l;
        !            51: } FLOAT_LONG, *PFLOAT_LONG;
        !            52: 
        !            53: typedef struct  tagPOINTFIX
        !            54: {
        !            55:     FIX   x;
        !            56:     FIX   y;
        !            57: } POINTFIX, *PPOINTFIX;
        !            58: 
        !            59: typedef struct tagRECTFX
        !            60: {
        !            61:     FIX   xLeft;
        !            62:     FIX   yTop;
        !            63:     FIX   xRight;
        !            64:     FIX   yBottom;
        !            65: } RECTFX, *PRECTFX;
        !            66: 
        !            67: 
        !            68: DECLARE_HANDLE(HBM);
        !            69: DECLARE_HANDLE(HSEM);
        !            70: DECLARE_HANDLE(HDEV);
        !            71: DECLARE_HANDLE(HPDEV);
        !            72: DECLARE_HANDLE(HJNL);
        !            73: DECLARE_HANDLE(HSURF);
        !            74: DECLARE_HANDLE(DHSURF);
        !            75: DECLARE_HANDLE(DHPDEV);
        !            76: 
        !            77: typedef HSURF *PHSURF;
        !            78: 
        !            79: 
        !            80: #define BLTOFXOK(x)         (((x) < 0x07FFFFFF) && ((x) > -0x07FFFFFF))
        !            81: #define LTOFX(x)            ((x)<<4)
        !            82: 
        !            83: #define FXTOL(x)            ((x)>>4)
        !            84: #define FXTOLFLOOR(x)       ((x)>>4)
        !            85: #define FXTOLCEILING(x)     ((x + 0x0F)>>4)
        !            86: #define FXTOLROUND(x)       ((((x) >> 3) + 1) >> 1)
        !            87: 
        !            88: typedef struct _FD_DEVICEMETRICS {       // devm
        !            89:     FLONG  flRealizedType;
        !            90:     POINTE pteBase;
        !            91:     POINTE pteSide;
        !            92:     LONG   lD;
        !            93:     FIX    fxMaxAscender;
        !            94:     FIX    fxMaxDescender;
        !            95:     POINTL ptlUnderline1;
        !            96:     POINTL ptlStrikeOut;
        !            97:     POINTL ptlULThickness;
        !            98:     POINTL ptlSOThickness;
        !            99:     ULONG  cxMax;                      // max pel width of bitmaps
        !           100: } FD_DEVICEMETRICS, *PFD_DEVICEMETRICS;
        !           101: 
        !           102: typedef struct _LIGATURE { /* lig */
        !           103:         ULONG culSize;
        !           104:         PWSZ pwsz;
        !           105:         ULONG chglyph;
        !           106:         HGLYPH ahglyph[1];
        !           107: } LIGATURE, *PLIGATURE;
        !           108: 
        !           109: typedef struct _FD_LIGATURE {
        !           110:         ULONG culThis;
        !           111:         ULONG ulType;
        !           112:         ULONG cLigatures;
        !           113:         LIGATURE alig[1];
        !           114: } FD_LIGATURE;
        !           115: 
        !           116: 
        !           117: // glyph handle must be 32 bit
        !           118: 
        !           119: 
        !           120: // signed 16 bit integer type denoting number of FUnit's
        !           121: 
        !           122: typedef SHORT FWORD;
        !           123: 
        !           124: typedef LARGE_INTEGER QFIX;      // qf
        !           125: 
        !           126: // point in the 32.32 bit precission
        !           127: 
        !           128: typedef struct _POINTQF    // ptq
        !           129: {
        !           130:     QFIX x;
        !           131:     QFIX y;
        !           132: } POINTQF, *PPOINTQF;
        !           133: 
        !           134: //. Structures
        !           135: 
        !           136: 
        !           137: //     devm.flRealizedType flags
        !           138: 
        !           139: // FDM_TYPE_ZERO_BEARINGS           // all glyphs have zero a and c spaces
        !           140: 
        !           141: // the following two features refer to all glyphs in this font realization
        !           142: 
        !           143: // FDM_TYPE_CHAR_INC_EQUAL_BM_BASE  // base width == cx for horiz, == cy for vert.
        !           144: // FDM_TYPE_MAXEXT_EQUAL_BM_SIDE    // side width == cy for horiz, == cx for vert.
        !           145: 
        !           146: #define FDM_TYPE_BM_SIDE_CONST          0x00000001
        !           147: #define FDM_TYPE_MAXEXT_EQUAL_BM_SIDE   0x00000002
        !           148: #define FDM_TYPE_CHAR_INC_EQUAL_BM_BASE 0x00000004
        !           149: #define FDM_TYPE_ZERO_BEARINGS          0x00000008
        !           150: #define FDM_TYPE_CONST_BEARINGS         0x00000010
        !           151: 
        !           152: 
        !           153: // structures for describing a supported set of glyphs in a font
        !           154: 
        !           155: typedef struct _WCRUN {
        !           156:     WCHAR   wcLow;        // lowest character in run  inclusive
        !           157:     USHORT  cGlyphs;      // wcHighInclusive = wcLow + cGlyphs - 1;
        !           158:     HGLYPH *phg;          // pointer to an array of cGlyphs HGLYPH's
        !           159: } WCRUN, *PWCRUN;
        !           160: 
        !           161: // If phg is set to (HGLYPH *)NULL, for all wc's in this particular run
        !           162: // the handle can be computed as simple zero extension:
        !           163: //        HGLYPH hg = (HGLYPH) wc;
        !           164: //
        !           165: // If phg is not NULL, memory pointed to by phg, allocated by the driver,
        !           166: // WILL NOT MOVE.
        !           167: 
        !           168: 
        !           169: typedef struct _FD_GLYPHSET {
        !           170:     ULONG    cjThis;           // size of this structure in butes
        !           171:     FLONG    flAccel;          // accel flags, bits to be explained below
        !           172:     ULONG    cGlyphsSupported; // sum over all wcrun's of wcrun.cGlyphs
        !           173:     ULONG    cRuns;
        !           174:     WCRUN    awcrun[1];        // an array of cRun WCRUN structures
        !           175: } FD_GLYPHSET, *PFD_GLYPHSET;
        !           176: 
        !           177: 
        !           178: #define GS_UNICODE_HANDLES      0x00000001
        !           179: 
        !           180: //    If this bit is set, for ALL WCRUNS in this FD_GLYPHSET the
        !           181: //    handles are
        !           182: //    obtained by zero extending unicode code points of
        !           183: //    the corresponding supported glyphs, i.e. all gs.phg's are NULL
        !           184: 
        !           185: // ligatures
        !           186: 
        !           187: 
        !           188: typedef struct _FD_KERNINGPAIR {
        !           189:     WCHAR  wcFirst;
        !           190:     WCHAR  wcSecond;
        !           191:     FWORD  fwdKern;
        !           192: } FD_KERNINGPAIR;
        !           193: 
        !           194: // context information
        !           195: 
        !           196: typedef struct _FD_XFORM {
        !           197:         FLOAT eXX;
        !           198:         FLOAT eXY;
        !           199:         FLOAT eYX;
        !           200:         FLOAT eYY;
        !           201: } FD_XFORM, *PFD_XFORM;
        !           202: 
        !           203: // An extra field passed to DrvQueryFontData with the DEVICEMETRICS.
        !           204: 
        !           205: typedef struct _FD_REALIZEEXTRA
        !           206: {
        !           207:     FD_XFORM  fdxQuantized;
        !           208:     LONG      lExtLeading;
        !           209:     LONG      alReserved[4];
        !           210: } FD_REALIZEEXTRA;
        !           211: 
        !           212: //
        !           213: // IFIMETRICS constants
        !           214: //
        !           215: 
        !           216: #define FM_VERSION_NUMBER                   0x0
        !           217: 
        !           218: //
        !           219: // IFIMETRICS::fsType flags
        !           220: //
        !           221: #define FM_TYPE_LICENSED                    0x1
        !           222: #define FM_READONLY_EMBED                   0x2
        !           223: #define FM_NO_EMBEDDING                     FM_TYPE_LICENSED
        !           224: 
        !           225: //
        !           226: // IFIMETRICS::flInfo flags
        !           227: //
        !           228: #define FM_INFO_TECH_TRUETYPE               0x00000001
        !           229: #define FM_INFO_TECH_BITMAP                 0x00000002
        !           230: #define FM_INFO_TECH_STROKE                 0x00000004
        !           231: #define FM_INFO_TECH_OUTLINE_NOT_TRUETYPE   0x00000008
        !           232: #define FM_INFO_ARB_XFORMS                  0x00000010
        !           233: #define FM_INFO_1BBP                        0x00000020
        !           234: #define FM_INFO_4BBP                        0x00000040
        !           235: #define FM_INFO_8BBP                        0x00000080
        !           236: #define FM_INFO_16BBP                       0x00000100
        !           237: #define FM_INFO_24BBP                       0x00000200
        !           238: #define FM_INFO_32BBP                       0x00000400
        !           239: #define FM_INFO_INTEGER_WIDTH               0x00000800
        !           240: #define FM_INFO_CONSTANT_WIDTH              0x00001000
        !           241: #define FM_INFO_NOT_CONTIGUOUS              0x00002000
        !           242: #define FM_INFO_PID_EMBEDDED                0x00004000
        !           243: #define FM_INFO_RETURNS_OUTLINES            0x00008000
        !           244: #define FM_INFO_RETURNS_STROKES             0x00010000
        !           245: #define FM_INFO_RETURNS_BITMAPS             0x00020000
        !           246: #define FM_INFO_UNICODE_COMPLIANT           0x00040000
        !           247: #define FM_INFO_RIGHT_HANDED                0x00080000
        !           248: #define FM_INFO_INTEGRAL_SCALING            0x00100000
        !           249: #define FM_INFO_90DEGREE_ROTATIONS          0x00200000
        !           250: #define FM_INFO_OPTICALLY_FIXED_PITCH       0x00400000
        !           251: #define FM_INFO_DO_NOT_ENUMERATE            0x00800000
        !           252: #define FM_INFO_ISOTROPIC_SCALING_ONLY      0x01000000
        !           253: #define FM_INFO_ANISOTROPIC_SCALING_ONLY    0x02000000
        !           254: #define FM_INFO_TID_EMBEDDED                0x04000000
        !           255: #define FM_INFO_FAMILY_EQUIV                0x08000000
        !           256: 
        !           257: 
        !           258: //
        !           259: // Useful combinations of IFIMETRICS::flInfo flags
        !           260: //
        !           261: 
        !           262: #define FM_INFO_TECH_SET  ( FM_INFO_TECH_TRUETYPE                | \
        !           263:                             FM_INFO_TECH_BITMAP                  | \
        !           264:                             FM_INFO_TECH_STROKE                  | \
        !           265:                             FM_INFO_TECH_OUTLINE_NOT_TRUETYPE )
        !           266: 
        !           267: #define FM_INFO_ALL_TT_FLAGS   ( FM_INFO_TECH_TRUETYPE    | \
        !           268:                                  FM_INFO_ARB_XFORMS       | \
        !           269:                                  FM_INFO_RETURNS_OUTLINES | \
        !           270:                                  FM_INFO_RETURNS_BITMAPS  | \
        !           271:                                  FM_INFO_1BBP )
        !           272: 
        !           273: //
        !           274: // IFIMETRICS::ulPanoseCulture
        !           275: //
        !           276: #define  FM_PANOSE_CULTURE_LATIN     0x0
        !           277: 
        !           278: 
        !           279: //
        !           280: // IFMETRICS::fsSelection flags
        !           281: //
        !           282: #define  FM_SEL_ITALIC          0x0001
        !           283: #define  FM_SEL_UNDERSCORE      0x0002
        !           284: #define  FM_SEL_NEGATIVE        0x0004
        !           285: #define  FM_SEL_OUTLINED        0x0008
        !           286: #define  FM_SEL_STRIKEOUT       0x0010
        !           287: #define  FM_SEL_BOLD            0x0020
        !           288: #define  FM_SEL_REGULAR         0x0040
        !           289: 
        !           290: //
        !           291: // The FONTDIFF structure contains all of the fields that could
        !           292: // possibly change under simulation
        !           293: //
        !           294: typedef struct _FONTDIFF {
        !           295:     BYTE   jReserved1;      // 0x0
        !           296:     BYTE   jReserved2;      // 0x1
        !           297:     BYTE   jReserved3;      // 0x2
        !           298:     BYTE   bWeight;         // 0x3  Panose Weight
        !           299:     USHORT usWinWeight;     // 0x4
        !           300:     FSHORT fsSelection;     // 0x6
        !           301:     FWORD  fwdAveCharWidth; // 0x8
        !           302:     FWORD  fwdMaxCharInc;   // 0xA
        !           303:     POINTL ptlCaret;        // 0xC
        !           304: } FONTDIFF;
        !           305: 
        !           306: typedef struct _FONTSIM {
        !           307:     PTRDIFF  dpBold;       // offset from beginning of FONTSIM to FONTDIFF
        !           308:     PTRDIFF  dpItalic;     // offset from beginning of FONTSIM to FONTDIFF
        !           309:     PTRDIFF  dpBoldItalic; // offset from beginning of FONTSIM to FONTDIFF
        !           310: } FONTSIM;
        !           311: 
        !           312: #define IFI_RESERVED    4   // number of reserved longs in IFIMETRICS
        !           313: 
        !           314: //
        !           315: // This entry in the reserved array is used to hold the PID or TID of the
        !           316: // client that created an embeded true type font.  Drivers should be careful
        !           317: // not to use it.
        !           318: //
        !           319: 
        !           320: #define IFI_RESERVED_EMBED_ID       0
        !           321: 
        !           322: //
        !           323: // This entry of the reserved array is used to return the italics angle.
        !           324: //
        !           325: 
        !           326: #define IFI_RESERVED_ITALIC_ANGLE   1
        !           327: 
        !           328: //
        !           329: // This entry of the reserved array is used to return the character bias.
        !           330: //
        !           331: 
        !           332: #define IFI_RESERVED_CHARBIAS       2
        !           333: 
        !           334: typedef struct _IFIMETRICS {
        !           335:     ULONG    cjThis;                // includes attached information
        !           336:     ULONG    ulVersion;
        !           337:     PTRDIFF  dpwszFamilyName;
        !           338:     PTRDIFF  dpwszStyleName;
        !           339:     PTRDIFF  dpwszFaceName;
        !           340:     PTRDIFF  dpwszUniqueName;
        !           341:     PTRDIFF  dpFontSim;
        !           342:     LONG     alReserved[IFI_RESERVED];
        !           343:     BYTE     jWinCharSet;           // as in LOGFONT::lfCharSet
        !           344:     BYTE     jWinPitchAndFamily;    // as in LOGFONT::lfPitchAndFamily
        !           345:     USHORT   usWinWeight;           // as in LOGFONT::lfWeight
        !           346:     ULONG    flInfo;                // see above
        !           347:     USHORT   fsSelection;           // see above
        !           348:     USHORT   fsType;                // see above
        !           349:     FWORD    fwdUnitsPerEm;         // em height
        !           350:     FWORD    fwdLowestPPEm;         // readable limit
        !           351:     FWORD    fwdWinAscender;
        !           352:     FWORD    fwdWinDescender;
        !           353:     FWORD    fwdMacAscender;
        !           354:     FWORD    fwdMacDescender;
        !           355:     FWORD    fwdMacLineGap;
        !           356:     FWORD    fwdTypoAscender;
        !           357:     FWORD    fwdTypoDescender;
        !           358:     FWORD    fwdTypoLineGap;
        !           359:     FWORD    fwdAveCharWidth;
        !           360:     FWORD    fwdMaxCharInc;
        !           361:     FWORD    fwdCapHeight;
        !           362:     FWORD    fwdXHeight;
        !           363:     FWORD    fwdSubscriptXSize;
        !           364:     FWORD    fwdSubscriptYSize;
        !           365:     FWORD    fwdSubscriptXOffset;
        !           366:     FWORD    fwdSubscriptYOffset;
        !           367:     FWORD    fwdSuperscriptXSize;
        !           368:     FWORD    fwdSuperscriptYSize;
        !           369:     FWORD    fwdSuperscriptXOffset;
        !           370:     FWORD    fwdSuperscriptYOffset;
        !           371:     FWORD    fwdUnderscoreSize;
        !           372:     FWORD    fwdUnderscorePosition;
        !           373:     FWORD    fwdStrikeoutSize;
        !           374:     FWORD    fwdStrikeoutPosition;
        !           375:     BYTE     chFirstChar;           // for win 3.1 compatibility
        !           376:     BYTE     chLastChar;            // for win 3.1 compatibility
        !           377:     BYTE     chDefaultChar;         // for win 3.1 compatibility
        !           378:     BYTE     chBreakChar;           // for win 3.1 compatibility
        !           379:     WCHAR    wcFirstChar;           // lowest supported code in Unicode set
        !           380:     WCHAR    wcLastChar;            // highest supported code in Unicode set
        !           381:     WCHAR    wcDefaultChar;
        !           382:     WCHAR    wcBreakChar;
        !           383:     POINTL   ptlBaseline;           //
        !           384:     POINTL   ptlAspect;             // designed aspect ratio (bitmaps)
        !           385:     POINTL   ptlCaret;              // points along caret
        !           386:     RECTL    rclFontBox;            // bounding box for all glyphs (font space)
        !           387:     BYTE     achVendId[4];          // as per TrueType
        !           388:     ULONG    cKerningPairs;
        !           389:     ULONG    ulPanoseCulture;
        !           390:     PANOSE   panose;
        !           391: } IFIMETRICS, *PIFIMETRICS;
        !           392: 
        !           393: 
        !           394: 
        !           395: 
        !           396: /**************************************************************************\
        !           397:  *
        !           398: \**************************************************************************/
        !           399: 
        !           400: #define DDI_DRIVER_VERSION 0x00010000
        !           401: #define DDI_ERROR          0xFFFFFFFF
        !           402: 
        !           403: typedef struct  _DRVFN  /* drvfn */
        !           404: {
        !           405:     ULONG   iFunc;
        !           406:     PFN     pfn;
        !           407: } DRVFN, *PDRVFN;
        !           408: 
        !           409: /* Required functions           */
        !           410: 
        !           411: #define INDEX_DrvEnablePDEV              0L
        !           412: #define INDEX_DrvCompletePDEV            1L
        !           413: #define INDEX_DrvDisablePDEV             2L
        !           414: #define INDEX_DrvEnableSurface           3L
        !           415: #define INDEX_DrvDisableSurface          4L
        !           416: 
        !           417: /* Other functions              */
        !           418: 
        !           419: #define INDEX_DrvAssertMode              5L
        !           420: #define INDEX_UNUSED4                    6L
        !           421: #define INDEX_UNUSED3                    7L
        !           422: #define INDEX_DrvRestartPDEV             8L
        !           423: #define INDEX_DrvQueryResource           9L
        !           424: #define INDEX_DrvCreateDeviceBitmap     10L
        !           425: #define INDEX_DrvDeleteDeviceBitmap     11L
        !           426: #define INDEX_DrvRealizeBrush           12L
        !           427: #define INDEX_DrvDitherColor            13L
        !           428: #define INDEX_DrvStrokePath             14L
        !           429: #define INDEX_DrvFillPath               15L
        !           430: #define INDEX_DrvStrokeAndFillPath      16L
        !           431: #define INDEX_DrvPaint                  17L
        !           432: #define INDEX_DrvBitBlt                 18L
        !           433: #define INDEX_DrvCopyBits               19L
        !           434: #define INDEX_DrvStretchBlt             20L
        !           435: #define INDEX_DrvPlgBlt                 21L
        !           436: #define INDEX_DrvSetPalette             22L
        !           437: #define INDEX_DrvTextOut                23L
        !           438: #define INDEX_DrvEscape                 24L
        !           439: #define INDEX_DrvDrawEscape             25L
        !           440: #define INDEX_DrvQueryFont              26L
        !           441: #define INDEX_DrvQueryFontTree          27L
        !           442: #define INDEX_DrvQueryFontData          28L
        !           443: #define INDEX_DrvSetPointerShape        29L
        !           444: #define INDEX_DrvMovePointer            30L
        !           445: #define INDEX_DrvUNUSED2                31L
        !           446: #define INDEX_DrvSendPage               32L
        !           447: #define INDEX_DrvStartPage              33L
        !           448: #define INDEX_DrvEndDoc                 34L
        !           449: #define INDEX_DrvStartDoc               35L
        !           450: #define INDEX_DrvQueryObjectData        36L
        !           451: #define INDEX_DrvGetGlyphMode           37L
        !           452: #define INDEX_DrvSynchronize            38L
        !           453: #define INDEX_DrvUNUSED1                39L
        !           454: #define INDEX_DrvSaveScreenBits         40L
        !           455: #define INDEX_DrvGetModes               41L
        !           456: #define INDEX_DrvFree                   42L
        !           457: #define INDEX_DrvDestroyFont            43L
        !           458: #define INDEX_DrvQueryFontCaps          44L
        !           459: #define INDEX_DrvLoadFontFile           45L
        !           460: #define INDEX_DrvUnloadFontFile         46L
        !           461: #define INDEX_DrvFontManagement         47L
        !           462: #define INDEX_DrvQueryTrueTypeTable     48L
        !           463: #define INDEX_DrvQueryTrueTypeOutline   49L
        !           464: #define INDEX_DrvGetTrueTypeFile        50L
        !           465: #define INDEX_DrvQueryFontFile          51L
        !           466: #define INDEX_UNUSED5                   52L
        !           467: #define INDEX_DrvQueryAdvanceWidths     53L
        !           468: 
        !           469: /* The total number of dispatched functions */
        !           470: 
        !           471: #define INDEX_LAST                      54L
        !           472: 
        !           473: typedef struct  tagDRVENABLEDATA
        !           474: {
        !           475:     ULONG   iDriverVersion;
        !           476:     ULONG   c;
        !           477:     DRVFN  *pdrvfn;
        !           478: } DRVENABLEDATA, *PDRVENABLEDATA;
        !           479: 
        !           480: typedef struct  tagDEVINFO
        !           481: {
        !           482:     FLONG       flGraphicsCaps;
        !           483:     LOGFONTW     lfDefaultFont;
        !           484:     LOGFONTW     lfAnsiVarFont;
        !           485:     LOGFONTW     lfAnsiFixFont;
        !           486:     ULONG       cFonts;
        !           487:     ULONG       iDitherFormat;
        !           488:     USHORT      cxDither;
        !           489:     USHORT      cyDither;
        !           490:     HPALETTE    hpalDefault;
        !           491: } DEVINFO, *PDEVINFO;
        !           492: 
        !           493: #define GCAPS_BEZIERS           0x00000001
        !           494: #define GCAPS_GEOMETRICWIDE     0x00000002
        !           495: #define GCAPS_ALTERNATEFILL     0x00000004
        !           496: #define GCAPS_WINDINGFILL       0x00000008
        !           497: #define GCAPS_HALFTONE          0x00000010
        !           498: #define GCAPS_COLOR_DITHER      0x00000020
        !           499: #define GCAPS_HORIZSTRIKE       0x00000040
        !           500: #define GCAPS_VERTSTRIKE        0x00000080
        !           501: #define GCAPS_OPAQUERECT        0x00000100
        !           502: #define GCAPS_VECTORFONT        0x00000200
        !           503: #define GCAPS_MONO_DITHER       0x00000400
        !           504: #define GCAPS_ASYNCCHANGE       0x00000800
        !           505: #define GCAPS_ASYNCMOVE         0x00001000
        !           506: #define GCAPS_ARBRUSHOPAQUE     0x00008000
        !           507: #define GCAPS_HIGHRESTEXT       0x00040000
        !           508: #define GCAPS_PALMANAGED        0x00080000
        !           509: #define GCAPS_TRAPPAINT         0x00100000
        !           510: #define GCAPS_DITHERONREALIZE   0x00200000
        !           511: 
        !           512: typedef struct  _HCINFO
        !           513: {
        !           514:     CHAR    szFormname[32];
        !           515:     LONG    cx;
        !           516:     LONG    cy;
        !           517:     LONG    xLeftClip;
        !           518:     LONG    yBottomClip;
        !           519:     LONG    xRightClip;
        !           520:     LONG    yTopClip;
        !           521:     LONG    xPels;
        !           522:     LONG    yPels;
        !           523:     FLONG   flAttributes;
        !           524: } HCINFO, *PHCINFO;
        !           525: 
        !           526: #define HCAPS_CURRENT           0x00000001
        !           527: 
        !           528: typedef struct  _LINEATTRS
        !           529: {
        !           530:     FLONG       fl;
        !           531:     ULONG       iJoin;
        !           532:     ULONG       iEndCap;
        !           533:     FLOAT_LONG  elWidth;
        !           534:     FLOAT       eMiterLimit;
        !           535:     ULONG       cstyle;
        !           536:     PFLOAT_LONG pstyle;
        !           537:     FLOAT_LONG  elStyleState;
        !           538: } LINEATTRS, *PLINEATTRS;
        !           539: 
        !           540: #define LA_GEOMETRIC        0x00000001
        !           541: #define LA_ALTERNATE        0x00000002
        !           542: #define LA_STARTGAP         0x00000004
        !           543: 
        !           544: #define JOIN_ROUND          0L
        !           545: #define JOIN_BEVEL          1L
        !           546: #define JOIN_MITER          2L
        !           547: 
        !           548: #define ENDCAP_ROUND        0L
        !           549: #define ENDCAP_SQUARE       1L
        !           550: #define ENDCAP_BUTT         2L
        !           551: 
        !           552: typedef struct _TRAPEZOID
        !           553: {
        !           554:     LONG     iScanTop;
        !           555:     LONG     iScanBottom;
        !           556:     POINTFIX ptfxLeftLo;
        !           557:     POINTFIX ptfxLeftHi;
        !           558:     POINTFIX ptfxRightLo;
        !           559:     POINTFIX ptfxRightHi;
        !           560: } TRAPEZOID;
        !           561: 
        !           562: 
        !           563: typedef LONG  LDECI4;
        !           564: 
        !           565: typedef struct _CIECHROMA
        !           566: {
        !           567:     LDECI4   x;
        !           568:     LDECI4   y;
        !           569:     LDECI4   Y;
        !           570: }CIECHROMA;
        !           571: 
        !           572: typedef struct _COLORINFO
        !           573: {
        !           574:     CIECHROMA  Red;
        !           575:     CIECHROMA  Green;
        !           576:     CIECHROMA  Blue;
        !           577:     CIECHROMA  Cyan;
        !           578:     CIECHROMA  Magenta;
        !           579:     CIECHROMA  Yellow;
        !           580:     CIECHROMA  AlignmentWhite;
        !           581: 
        !           582:     LDECI4  RedGamma;
        !           583:     LDECI4  GreenGamma;
        !           584:     LDECI4  BlueGamma;
        !           585: 
        !           586:     LDECI4  MagentaInCyanDye;
        !           587:     LDECI4  YellowInCyanDye;
        !           588:     LDECI4  CyanInMagentaDye;
        !           589:     LDECI4  YellowInMagentaDye;
        !           590:     LDECI4  CyanInYellowDye;
        !           591:     LDECI4  MagentaInYellowDye;
        !           592: }COLORINFO, *PCOLORINFO;
        !           593: 
        !           594: // Allowed values for GDIINFO.ulPrimaryOrder.
        !           595: 
        !           596: #define PRIMARY_ORDER_ABC       0
        !           597: #define PRIMARY_ORDER_ACB       1
        !           598: #define PRIMARY_ORDER_BAC       2
        !           599: #define PRIMARY_ORDER_BCA       3
        !           600: #define PRIMARY_ORDER_CBA       4
        !           601: #define PRIMARY_ORDER_CAB       5
        !           602: 
        !           603: // Allowed values for GDIINFO.ulHTPatternSize.
        !           604: 
        !           605: #define HT_PATSIZE_2x2          0
        !           606: #define HT_PATSIZE_2x2_M        1
        !           607: #define HT_PATSIZE_4x4          2
        !           608: #define HT_PATSIZE_4x4_M        3
        !           609: #define HT_PATSIZE_6x6          4
        !           610: #define HT_PATSIZE_6x6_M        5
        !           611: #define HT_PATSIZE_8x8          6
        !           612: #define HT_PATSIZE_8x8_M        7
        !           613: #define HT_PATSIZE_10x10        8
        !           614: #define HT_PATSIZE_10x10_M      9
        !           615: #define HT_PATSIZE_12x12        10
        !           616: #define HT_PATSIZE_12x12_M      11
        !           617: #define HT_PATSIZE_14x14        12
        !           618: #define HT_PATSIZE_14x14_M      13
        !           619: #define HT_PATSIZE_16x16        14
        !           620: #define HT_PATSIZE_16x16_M      15
        !           621: #define HT_PATSIZE_MAX_INDEX    HTPAT_SIZE_16x16_M
        !           622: #define HT_PATSIZE_DEFAULT      HTPAT_SIZE_4x4_M
        !           623: 
        !           624: // Allowed values for ulHTOutputFormat.
        !           625: 
        !           626: #define HT_FORMAT_1BPP          0
        !           627: #define HT_FORMAT_4BPP          2
        !           628: #define HT_FORMAT_4BPP_IRGB     3
        !           629: #define HT_FORMAT_8BPP          4
        !           630: #define HT_FORMAT_16BPP         5
        !           631: #define HT_FORMAT_24BPP         6
        !           632: #define HT_FORMAT_32BPP         7
        !           633: 
        !           634: // Allowed values for GDIINFO.flHTFlags.
        !           635: 
        !           636: #define HT_FLAG_SQUARE_DEVICE_PEL    0x00000001
        !           637: #define HT_FLAG_HAS_BLACK_DYE        0x00000002
        !           638: #define HT_FLAG_ADDITIVE_PRIMS       0x00000004
        !           639: #define HT_FLAG_OUTPUT_CMY           0x00000100
        !           640: 
        !           641: typedef struct _GDIINFO
        !           642: {
        !           643:     ULONG ulVersion;
        !           644:     ULONG ulTechnology;
        !           645:     ULONG ulHorzSize;
        !           646:     ULONG ulVertSize;
        !           647:     ULONG ulHorzRes;
        !           648:     ULONG ulVertRes;
        !           649:     ULONG cBitsPixel;
        !           650:     ULONG cPlanes;
        !           651:     ULONG ulNumColors;
        !           652:     ULONG flRaster;
        !           653:     ULONG ulLogPixelsX;
        !           654:     ULONG ulLogPixelsY;
        !           655:     ULONG flTextCaps;
        !           656: 
        !           657:     ULONG ulDACRed;
        !           658:     ULONG ulDACGreen;
        !           659:     ULONG ulDACBlue;
        !           660: 
        !           661:     ULONG ulAspectX;
        !           662:     ULONG ulAspectY;
        !           663:     ULONG ulAspectXY;
        !           664: 
        !           665:     LONG xStyleStep;
        !           666:     LONG yStyleStep;
        !           667:     LONG denStyleStep;
        !           668: 
        !           669:     POINTL ptlPhysOffset;
        !           670:     SIZEL  szlPhysSize;
        !           671: 
        !           672:     ULONG ulNumPalReg;
        !           673: 
        !           674: // These fields are for halftone initialization.
        !           675: 
        !           676:     COLORINFO ciDevice;
        !           677:     ULONG     ulDevicePelsDPI;
        !           678:     ULONG     ulPrimaryOrder;
        !           679:     ULONG     ulHTPatternSize;
        !           680:     ULONG     ulHTOutputFormat;
        !           681:     ULONG     flHTFlags;
        !           682: 
        !           683: } GDIINFO, *PGDIINFO;
        !           684: 
        !           685: /*
        !           686:  * User objects
        !           687:  */
        !           688: 
        !           689: typedef struct _BRUSHOBJ
        !           690: {
        !           691:     ULONG   iSolidColor;
        !           692:     PVOID   pvRbrush;
        !           693: } BRUSHOBJ;
        !           694: 
        !           695: typedef struct _CLIPOBJ
        !           696: {
        !           697:     ULONG   iUniq;
        !           698:     RECTL   rclBounds;
        !           699:     BYTE    iDComplexity;
        !           700:     BYTE    iFComplexity;
        !           701:     BYTE    iMode;
        !           702:     BYTE    fjOptions;
        !           703: } CLIPOBJ;
        !           704: 
        !           705: typedef struct _DDAOBJ
        !           706: {
        !           707:     ULONG   ulReserved;
        !           708: } DDAOBJ;
        !           709: 
        !           710: typedef struct _FONTOBJ
        !           711: {
        !           712:     ULONG   iUniq;
        !           713:     ULONG   iFace;
        !           714:     ULONG   cxMax;
        !           715:     FLONG   flFontType;
        !           716:     ULONG   iTTUniq;
        !           717:     ULONG   iFile;
        !           718:     SIZE    sizLogResPpi;
        !           719:     ULONG   ulStyleSize;
        !           720:     PVOID   pvConsumer;
        !           721:     PVOID   pvProducer;
        !           722: } FONTOBJ;
        !           723: 
        !           724: //
        !           725: // FONTOBJ::flFontType
        !           726: //
        !           727: #define FO_TYPE_RASTER   RASTER_FONTTYPE     /* 0x1 */
        !           728: #define FO_TYPE_DEVICE   DEVICE_FONTTYPE     /* 0x2 */
        !           729: #define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE   /* 0x4 */
        !           730: #define FO_SIM_BOLD      0x00002000
        !           731: #define FO_SIM_ITALIC    0x00004000
        !           732: #define FO_EM_HEIGHT     0x00008000
        !           733: #define FO_NO_HINTING    0x00010000
        !           734: 
        !           735: typedef struct _PALOBJ
        !           736: {
        !           737:     ULONG   ulReserved;
        !           738: } PALOBJ;
        !           739: 
        !           740: typedef struct _PATHOBJ
        !           741: {
        !           742:     FLONG   fl;
        !           743:     ULONG   cCurves;
        !           744: } PATHOBJ;
        !           745: 
        !           746: typedef struct _SURFOBJ
        !           747: {
        !           748:     DHSURF  dhsurf;
        !           749:     HSURF   hsurf;
        !           750:     DHPDEV  dhpdev;
        !           751:     HDEV    hdev;
        !           752:     SIZEL   sizlBitmap;
        !           753:     ULONG   cjBits;
        !           754:     PVOID   pvBits;
        !           755:     PVOID   pvScan0;
        !           756:     LONG    lDelta;
        !           757:     ULONG   iUniq;
        !           758:     ULONG   iBitmapFormat;
        !           759:     USHORT  iType;
        !           760:     USHORT  fjBitmap;
        !           761: } SURFOBJ;
        !           762: 
        !           763: typedef struct _XFORMOBJ
        !           764: {
        !           765:     ULONG ulReserved;
        !           766: } XFORMOBJ;
        !           767: 
        !           768: typedef struct _XLATEOBJ
        !           769: {
        !           770:     ULONG   iUniq;
        !           771:     FLONG   flXlate;
        !           772:     USHORT  iSrcType;
        !           773:     USHORT  iDstType;
        !           774:     ULONG   cEntries;
        !           775:     ULONG  *pulXlate;
        !           776: } XLATEOBJ;
        !           777: 
        !           778: /*
        !           779:  * BRUSHOBJ callbacks
        !           780:  */
        !           781: 
        !           782: PVOID BRUSHOBJ_pvAllocRbrush(
        !           783: BRUSHOBJ *pbo,
        !           784: ULONG     cj);
        !           785: 
        !           786: PVOID BRUSHOBJ_pvGetRbrush(BRUSHOBJ *pbo);
        !           787: 
        !           788: /*
        !           789:  * CLIPOBJ callbacks
        !           790:  */
        !           791: 
        !           792: #define DC_TRIVIAL      0
        !           793: #define DC_RECT         1
        !           794: #define DC_COMPLEX      3
        !           795: 
        !           796: #define FC_RECT         1
        !           797: #define FC_RECT4        2
        !           798: #define FC_COMPLEX      3
        !           799: 
        !           800: #define TC_RECTANGLES   0
        !           801: #define TC_TRAPEZOIDS   1
        !           802: #define TC_PATHOBJ      2
        !           803: 
        !           804: #define OC_BANK_CLIP    1
        !           805: 
        !           806: #define CT_RECTANGLES   0L
        !           807: #define CT_TRAPEZOIDS   1L
        !           808: #define CT_NOTIFYCHANGE 2L
        !           809: 
        !           810: #define CD_RIGHTDOWN    0L
        !           811: #define CD_LEFTDOWN     1L
        !           812: #define CD_RIGHTUP      2L
        !           813: #define CD_LEFTUP       3L
        !           814: #define CD_ANY          4L
        !           815: 
        !           816: #define CD_LEFTWARDS    1L
        !           817: #define CD_UPWARDS      2L
        !           818: 
        !           819: typedef struct _ENUMRECTS
        !           820: {
        !           821:     ULONG       c;
        !           822:     RECTL       arcl[1];
        !           823: } ENUMRECTS;
        !           824: 
        !           825: typedef struct _ENUMTRAPS
        !           826: {
        !           827:     ULONG       c;
        !           828:     TRAPEZOID   atrap[1];
        !           829: } ENUMTRAPS;
        !           830: 
        !           831: ULONG CLIPOBJ_cEnumStart(
        !           832: CLIPOBJ *pco,
        !           833: BOOL     bAll,
        !           834: ULONG    iType,
        !           835: ULONG    iDirection,
        !           836: ULONG    cLimit);
        !           837: 
        !           838: BOOL CLIPOBJ_bEnum(
        !           839: CLIPOBJ *pco,
        !           840: ULONG    cj,
        !           841: ULONG   *pul);
        !           842: 
        !           843: PATHOBJ *CLIPOBJ_ppoGetPath(CLIPOBJ* pco);
        !           844: 
        !           845: /*
        !           846:  *   DDAOBJ callbacks
        !           847:  */
        !           848: 
        !           849: #define JD_ENUM_LINE        0L
        !           850: #define JD_ENUM_TRAPEZOID   1L
        !           851: #define JD_ENUM_ELLIPSE     2L
        !           852: 
        !           853: typedef struct _DDALIST
        !           854: {
        !           855:    LONG yTop;
        !           856:    LONG yBottom;
        !           857:    LONG axPairs[2];
        !           858: } DDALIST;
        !           859: 
        !           860: BOOL DDAOBJ_bEnum(
        !           861: DDAOBJ  *pdo,
        !           862: PVOID    pv,
        !           863: ULONG    cj,
        !           864: DDALIST *pddal,
        !           865: ULONG    iType);
        !           866: 
        !           867: /*
        !           868:  *   FONTOBJ callbacks
        !           869:  */
        !           870: 
        !           871: typedef struct _GLYPHBITS
        !           872: {
        !           873:     POINTL      ptlOrigin;
        !           874:     SIZEL       sizlBitmap;
        !           875:     BYTE        aj[1];
        !           876: } GLYPHBITS;
        !           877: 
        !           878: #define FO_HGLYPHS          0L
        !           879: #define FO_GLYPHBITS        1L
        !           880: #define FO_PATHOBJ          2L
        !           881: 
        !           882: #define FD_NEGATIVE_FONT    1L
        !           883: 
        !           884: #define FO_DEVICE_FONT      1L
        !           885: #define FO_OUTLINE_CAPABLE  2L
        !           886: 
        !           887: typedef union _GLYPHDEF
        !           888: {
        !           889:     GLYPHBITS  *pgb;
        !           890:     PATHOBJ    *ppo;
        !           891: } GLYPHDEF;
        !           892: 
        !           893: typedef struct _GLYPHPOS    /* gp */
        !           894: {
        !           895:     HGLYPH      hg;
        !           896:     GLYPHDEF   *pgdf;
        !           897:     POINTL      ptl;
        !           898: } GLYPHPOS,*PGLYPHPOS;
        !           899: 
        !           900: 
        !           901: // individual glyph data
        !           902: 
        !           903: // r is a unit vector along the baseline in device coordinates.
        !           904: // s is a unit vector in the ascent direction in device coordinates.
        !           905: // A, B, and C, are simple tranforms of the notional space versions into
        !           906: // (28.4) device coordinates.  The dot products of those vectors with r
        !           907: // are recorded here.  Note that the high words of ptqD are also 28.4
        !           908: // device coordinates.  The low words provide extra accuracy.
        !           909: 
        !           910: typedef struct _GLYPHDATA {
        !           911:         GLYPHDEF gdf;               // pointer to GLYPHBITS or to PATHOBJ
        !           912:         HGLYPH   hg;                // glyhp handle
        !           913:         POINTQF  ptqD;              // Character increment vector: D=A+B+C.
        !           914:         FIX      fxD;               // Character increment amount: D*r.
        !           915:         FIX      fxA;               // Prebearing amount: A*r.
        !           916:         FIX      fxAB;              // Advancing edge of character: (A+B)*r.
        !           917:         FIX      fxInkTop;          // Baseline to inkbox top along s.
        !           918:         FIX      fxInkBottom;       // Baseline to inkbox bottom along s.
        !           919:         RECTL    rclInk;            // Ink box with sides parallel to x,y axes
        !           920: } GLYPHDATA;
        !           921: 
        !           922: 
        !           923: // flAccel flags for STROBJ
        !           924: 
        !           925: // SO_FLAG_DEFAULT_PLACEMENT // defult inc vectors used to position chars
        !           926: // SO_HORIZONTAL             // "left to right" or "right to left"
        !           927: // SO_VERTICAL               // "top to bottom" or "bottom to top"
        !           928: // SO_REVERSED               // set if horiz & "right to left" or if vert &  "bottom to top"
        !           929: // SO_ZERO_BEARINGS          // all glyphs have zero a and c spaces
        !           930: // SO_CHAR_INC_EQUAL_BM_BASE // base == cx for horiz, == cy for vert.
        !           931: // SO_MAXEXT_EQUAL_BM_SIDE   // side == cy for horiz, == cx for vert.
        !           932: 
        !           933: #define SO_FLAG_DEFAULT_PLACEMENT        0x00000001
        !           934: #define SO_HORIZONTAL                    0x00000002
        !           935: #define SO_VERTICAL                      0x00000004
        !           936: #define SO_REVERSED                      0x00000008
        !           937: #define SO_ZERO_BEARINGS                 0x00000010
        !           938: #define SO_CHAR_INC_EQUAL_BM_BASE        0x00000020
        !           939: #define SO_MAXEXT_EQUAL_BM_SIDE          0x00000040
        !           940: 
        !           941: typedef struct _STROBJ
        !           942: {
        !           943:     ULONG     cGlyphs;     // # of glyphs to render
        !           944:     FLONG     flAccel;
        !           945:     ULONG     ulCharInc;   // zero if fixed pitch font, else equal to increment
        !           946:     RECTL     rclBkGround; // bk ground  rect of the string in device coords
        !           947:     GLYPHPOS *pgp;         // If non-NULL then has all glyphs.
        !           948:     PWSTR     pwszOrg;     // pointer to original unicode string.
        !           949: } STROBJ;
        !           950: 
        !           951: typedef struct _FONTINFO /* fi */
        !           952: {
        !           953:     ULONG   cjThis;
        !           954:     FLONG   flCaps;
        !           955:     ULONG   cGlyphsSupported;
        !           956:     ULONG   cjMaxGlyph1;
        !           957:     ULONG   cjMaxGlyph4;
        !           958:     ULONG   cjMaxGlyph8;
        !           959:     ULONG   cjMaxGlyph32;
        !           960: } FONTINFO, *PFONTINFO;
        !           961: 
        !           962: ULONG FONTOBJ_cGetAllGlyphHandles(
        !           963: FONTOBJ *pfo,
        !           964: HGLYPH  *phg);
        !           965: 
        !           966: VOID FONTOBJ_vGetInfo(
        !           967: FONTOBJ  *pfo,
        !           968: ULONG     cjSize,
        !           969: FONTINFO *pfi);
        !           970: 
        !           971: ULONG FONTOBJ_cGetGlyphs(
        !           972: FONTOBJ *pfo,
        !           973: ULONG    iMode,
        !           974: ULONG    cGlyph,
        !           975: HGLYPH  *phg,
        !           976: PVOID   *ppvGlyph);
        !           977: 
        !           978: XFORMOBJ *FONTOBJ_pxoGetXform(FONTOBJ *pfo);
        !           979: IFIMETRICS* FONTOBJ_pifi(FONTOBJ *pfo);
        !           980: 
        !           981: // possible values that iMode can take:
        !           982: 
        !           983: /*
        !           984:  * PALOBJ callbacks
        !           985:  */
        !           986: 
        !           987: #define PAL_INDEXED       0x00000001
        !           988: #define PAL_BITFIELDS     0x00000002
        !           989: #define PAL_RGB           0x00000004
        !           990: #define PAL_BGR           0x00000008
        !           991: #define PAL_DC            0x00000010
        !           992: #define PAL_FIXED         0x00000020
        !           993: #define PAL_FREE          0x00000040
        !           994: #define PAL_MANAGED       0x00000080
        !           995: #define PAL_NOSTATIC      0x00000100
        !           996: #define PAL_MONOCHROME    0x00000200
        !           997: 
        !           998: ULONG PALOBJ_cGetColors(
        !           999: PALOBJ *ppalo,
        !          1000: ULONG   iStart,
        !          1001: ULONG   cColors,
        !          1002: ULONG  *pulColors);
        !          1003: 
        !          1004: PVOID  FONTOBJ_pvTrueTypeFontFile(
        !          1005: FONTOBJ *pfo,
        !          1006: ULONG   *pcjFile);
        !          1007: 
        !          1008: /*
        !          1009:  * PATHOBJ callbacks
        !          1010:  */
        !          1011: 
        !          1012: #define PO_BEZIERS        0x00000001
        !          1013: #define PO_ELLIPSE        0x00000002
        !          1014: 
        !          1015: #define PD_BEGINSUBPATH   0x00000001
        !          1016: #define PD_ENDSUBPATH     0x00000002
        !          1017: #define PD_RESETSTYLE     0x00000004
        !          1018: #define PD_CLOSEFIGURE    0x00000008
        !          1019: #define PD_BEZIERS        0x00000010
        !          1020: #define PD_ALL           (PD_BEGINSUBPATH | \
        !          1021:                           PD_ENDSUBPATH   | \
        !          1022:                           PD_RESETSTYLE   | \
        !          1023:                           PD_CLOSEFIGURE  | \
        !          1024:                           PD_BEZIERS)
        !          1025: 
        !          1026: typedef struct  _PATHDATA
        !          1027: {
        !          1028:     FLONG    flags;
        !          1029:     ULONG    count;
        !          1030:     POINTFIX *pptfx;
        !          1031: } PATHDATA, *PPATHDATA;
        !          1032: 
        !          1033: typedef struct  _RUN
        !          1034: {
        !          1035:     LONG    iStart;
        !          1036:     LONG    iStop;
        !          1037: } RUN, *PRUN;
        !          1038: 
        !          1039: typedef struct  _CLIPLINE
        !          1040: {
        !          1041:     POINTFIX ptfxA;
        !          1042:     POINTFIX ptfxB;
        !          1043:     LONG    lStyleState;
        !          1044:     ULONG   c;
        !          1045:     RUN     arun[1];
        !          1046: } CLIPLINE, *PCLIPLINE;
        !          1047: 
        !          1048: VOID  PATHOBJ_vEnumStart(PATHOBJ *ppo);
        !          1049: 
        !          1050: BOOL PATHOBJ_bEnum(
        !          1051: PATHOBJ  *ppo,
        !          1052: PATHDATA *ppd);
        !          1053: 
        !          1054: VOID  PATHOBJ_vEnumStartClipLines(
        !          1055: PATHOBJ   *ppo,
        !          1056: CLIPOBJ   *pco,
        !          1057: SURFOBJ   *pso,
        !          1058: LINEATTRS *pla);
        !          1059: 
        !          1060: BOOL PATHOBJ_bEnumClipLines(
        !          1061: PATHOBJ  *ppo,
        !          1062: ULONG     cb,
        !          1063: CLIPLINE *pcl);
        !          1064: 
        !          1065: BOOL  PATHOBJ_bMoveTo(
        !          1066: PATHOBJ    *ppo,
        !          1067: POINTFIX    ptfx);
        !          1068: 
        !          1069: BOOL  PATHOBJ_bPolyLineTo(
        !          1070: PATHOBJ   *ppo,
        !          1071: POINTFIX  *pptfx,
        !          1072: ULONG      cptfx);
        !          1073: 
        !          1074: BOOL  PATHOBJ_bPolyBezierTo(
        !          1075: PATHOBJ   *ppo,
        !          1076: POINTFIX  *pptfx,
        !          1077: ULONG      cptfx);
        !          1078: 
        !          1079: BOOL  PATHOBJ_bCloseFigure(PATHOBJ   *ppo);
        !          1080: 
        !          1081: VOID  PATHOBJ_vGetBounds(
        !          1082: PATHOBJ *ppo,
        !          1083: PRECTFX prectfx);
        !          1084: 
        !          1085: /*
        !          1086:  * STROBJ callbacks
        !          1087:  */
        !          1088: 
        !          1089: #define SO_GLYPHHANDLES 0L
        !          1090: #define SO_MONOBITMAP   1L
        !          1091: #define SO_PATHOBJ      2L
        !          1092: 
        !          1093: VOID STROBJ_vEnumStart(
        !          1094: STROBJ *pstro);
        !          1095: 
        !          1096: BOOL STROBJ_bEnum(
        !          1097: STROBJ    *pstro,
        !          1098: ULONG     *pgpos,
        !          1099: PGLYPHPOS *ppgpos);
        !          1100: 
        !          1101: #define SGI_EXTRASPACE 0
        !          1102: 
        !          1103: /*
        !          1104:  * SURFOBJ callbacks
        !          1105:  */
        !          1106: 
        !          1107: #define STYPE_BITMAP    0L
        !          1108: #define STYPE_DEVICE    1L
        !          1109: #define STYPE_JOURNAL   2L
        !          1110: #define STYPE_DEVBITMAP 3L
        !          1111: 
        !          1112: #define BMF_DEVICE     0L
        !          1113: #define BMF_1BPP       1L
        !          1114: #define BMF_4BPP       2L
        !          1115: #define BMF_8BPP       3L
        !          1116: #define BMF_16BPP      4L
        !          1117: #define BMF_24BPP      5L
        !          1118: #define BMF_32BPP      6L
        !          1119: #define BMF_4RLE       7L
        !          1120: #define BMF_8RLE       8L
        !          1121: 
        !          1122: #define BMF_TOPDOWN    0x0001
        !          1123: 
        !          1124: /*
        !          1125:  * XFORMOBJ callbacks
        !          1126:  */
        !          1127: 
        !          1128: #define GX_IDENTITY     0L
        !          1129: #define GX_OFFSET       1L
        !          1130: #define GX_SCALE        2L
        !          1131: #define GX_GENERAL      3L
        !          1132: 
        !          1133: #define XF_LTOL         0L
        !          1134: #define XF_INV_LTOL     1L
        !          1135: #define XF_LTOFX        2L
        !          1136: #define XF_INV_FXTOL    3L
        !          1137: 
        !          1138: ULONG XFORMOBJ_iGetXform(
        !          1139: XFORMOBJ *pxo,
        !          1140: XFORM    *pxform);
        !          1141: 
        !          1142: BOOL XFORMOBJ_bApplyXform(
        !          1143: XFORMOBJ *pxo,
        !          1144: ULONG     iMode,
        !          1145: ULONG     cPoints,
        !          1146: PVOID     pvIn,
        !          1147: PVOID     pvOut);
        !          1148: 
        !          1149: /*
        !          1150:  * XLATEOBJ callbacks
        !          1151:  */
        !          1152: 
        !          1153: #define XO_TRIVIAL      0x00000001
        !          1154: #define XO_TABLE        0x00000002
        !          1155: #define XO_TO_MONO      0x00000004
        !          1156: #define XO_FROM_MONO    0x00000008
        !          1157: #define XO_RGB_SRC      0x00000010
        !          1158: #define XO_RGB_BOTH     0x00000020
        !          1159: #define XO_PAL_MANAGED  0x00000040
        !          1160: 
        !          1161: #define XO_SRCPALETTE    1
        !          1162: #define XO_DESTPALETTE   2
        !          1163: #define XO_DESTDCPALETTE 3
        !          1164: 
        !          1165: ULONG XLATEOBJ_iXlate(XLATEOBJ *pxlo, ULONG iColor);
        !          1166: ULONG *XLATEOBJ_piVector(XLATEOBJ *pxlo);
        !          1167: ULONG XLATEOBJ_cGetPalette(
        !          1168: XLATEOBJ *pxlo,
        !          1169: ULONG     iPal,
        !          1170: ULONG     cPal,
        !          1171: ULONG    *pPal);
        !          1172: 
        !          1173: /*
        !          1174:  * Engine callbacks - error logging
        !          1175:  */
        !          1176: 
        !          1177: VOID EngSetLastError(ULONG);
        !          1178: 
        !          1179: /*
        !          1180:  * Engine callbacks - Surfaces
        !          1181:  */
        !          1182: 
        !          1183: #define HOOK_BITBLT                     0x00000001
        !          1184: #define HOOK_STRETCHBLT                 0x00000002
        !          1185: #define HOOK_PLGBLT                     0x00000004
        !          1186: #define HOOK_TEXTOUT                    0x00000008
        !          1187: #define HOOK_PAINT                      0x00000010
        !          1188: #define HOOK_STROKEPATH                 0x00000020
        !          1189: #define HOOK_FILLPATH                   0x00000040
        !          1190: #define HOOK_STROKEANDFILLPATH          0x00000080
        !          1191: #define HOOK_COPYBITS                   0x00000400
        !          1192: #define HOOK_SYNCHRONIZE                0x00001000
        !          1193: #define HOOK_CONSOLETEXTOUT             0x00002000
        !          1194: 
        !          1195: HSURF EngCreateSurface(DHSURF dhsurf, SIZEL sizl);
        !          1196: 
        !          1197: HBITMAP EngCreateBitmap(
        !          1198: SIZEL sizl,
        !          1199: ULONG ulWidth,
        !          1200: ULONG iFormat,
        !          1201: FLONG fl,
        !          1202: PVOID pvBits);
        !          1203: 
        !          1204: HSURF EngCreateDeviceSurface(DHSURF dhsurf, SIZEL sizl, ULONG iFormatCompat);
        !          1205: HBITMAP EngCreateDeviceBitmap(DHSURF dhsurf, SIZEL sizl, ULONG iFormatCompat);
        !          1206: 
        !          1207: HBITMAP EngCreateEngineBitmap(
        !          1208: DHSURF dhsurf,
        !          1209: SIZEL sizl,
        !          1210: LONG  lDelta,
        !          1211: ULONG iFormat,
        !          1212: FLONG fl,
        !          1213: PVOID pvBits);
        !          1214: 
        !          1215: BOOL EngDeleteSurface(HSURF hsurf);
        !          1216: SURFOBJ *EngLockSurface(HSURF hsurf);
        !          1217: VOID     EngUnlockSurface(SURFOBJ *pso);
        !          1218: 
        !          1219: BOOL EngEraseSurface(
        !          1220: SURFOBJ *pso,
        !          1221: RECTL   *prcl,
        !          1222: ULONG    iColor);
        !          1223: 
        !          1224: BOOL EngAssociateSurface(
        !          1225: HSURF hsurf,
        !          1226: HDEV  hdev,
        !          1227: FLONG flHooks);
        !          1228: 
        !          1229: BOOL EngPlayJournal(
        !          1230: SURFOBJ *psoTarget,
        !          1231: SURFOBJ *psoJournal,
        !          1232: RECTL   *prclBand);
        !          1233: 
        !          1234: BOOL EngStartBandPage(SURFOBJ *pso);
        !          1235: 
        !          1236: HSURF EngCreateJournal(SIZEL sizl, ULONG iFormat);
        !          1237: 
        !          1238: BOOL EngCheckAbort(SURFOBJ *pso);
        !          1239: 
        !          1240: /*
        !          1241:  * Engine callbacks - Paths
        !          1242:  */
        !          1243: 
        !          1244: PATHOBJ *EngCreatePath();
        !          1245: VOID EngDeletePath(PATHOBJ *ppo);
        !          1246: 
        !          1247: /*
        !          1248:  * Engine callbacks - Palettes
        !          1249:  */
        !          1250: 
        !          1251: HPALETTE EngCreatePalette(
        !          1252: ULONG  iMode,
        !          1253: ULONG  cColors,
        !          1254: ULONG *pulColors,
        !          1255: FLONG  flRed,
        !          1256: FLONG  flGreen,
        !          1257: FLONG  flBlue);
        !          1258: 
        !          1259: BOOL EngDeletePalette(HPALETTE hpal);
        !          1260: 
        !          1261: /*
        !          1262:  * Engine callbacks - Clipping
        !          1263:  */
        !          1264: 
        !          1265: CLIPOBJ *EngCreateClip();
        !          1266: VOID EngDeleteClip(CLIPOBJ *pco);
        !          1267: 
        !          1268: /*
        !          1269:  * Engine callbacks - DDAs
        !          1270:  */
        !          1271: 
        !          1272: DDAOBJ *EngCreateDDA();
        !          1273: VOID EngDeleteDDA(DDAOBJ *pdo);
        !          1274: 
        !          1275: /*
        !          1276:  * Function prototypes
        !          1277:  */
        !          1278: 
        !          1279: // These are the only EXPORTED functions for ANY driver
        !          1280: 
        !          1281: BOOL DrvEnableDriver(
        !          1282: ULONG          iEngineVersion,
        !          1283: ULONG          cj,
        !          1284: DRVENABLEDATA *pded);
        !          1285: 
        !          1286: VOID  DrvDisableDriver();
        !          1287: 
        !          1288: /*
        !          1289:  * Driver functions
        !          1290:  */
        !          1291: 
        !          1292: DHPDEV DrvEnablePDEV(
        !          1293: DEVMODEW *pdm,
        !          1294: PWSTR     pwszLogAddress,
        !          1295: ULONG     cPat,
        !          1296: HSURF    *phsurfPatterns,
        !          1297: ULONG     cjCaps,
        !          1298: ULONG    *pdevcaps,
        !          1299: ULONG     cjDevInfo,
        !          1300: DEVINFO  *pdi,
        !          1301: PWSTR     pwszDataFile,
        !          1302: PWSTR     pwszDeviceName,
        !          1303: HANDLE    hDriver);
        !          1304: 
        !          1305: #define HS_DDI_MAX 19
        !          1306: 
        !          1307: BOOL DrvRestartPDEV(
        !          1308: DHPDEV    dhpdev,
        !          1309: DEVMODEW *pdm,
        !          1310: ULONG     cPat,
        !          1311: HSURF    *phsurfPatterns,
        !          1312: ULONG     cjCaps,
        !          1313: ULONG    *pdevcaps,
        !          1314: ULONG     cjDevInfo,
        !          1315: DEVINFO  *pdi);
        !          1316: 
        !          1317: VOID  DrvCompletePDEV(DHPDEV dhpdev,HDEV hdev);
        !          1318: 
        !          1319: HSURF DrvEnableSurface(DHPDEV dhpdev);
        !          1320: VOID  DrvSynchronize(DHPDEV dhpdev,RECTL *prcl);
        !          1321: VOID  DrvDisableSurface(DHPDEV dhpdev);
        !          1322: VOID  DrvDisablePDEV(DHPDEV dhpdev);
        !          1323: 
        !          1324: /* DrvSaveScreenBits - iMode definitions */
        !          1325: 
        !          1326: #define SS_SAVE    0
        !          1327: #define SS_RESTORE 1
        !          1328: #define SS_FREE    2
        !          1329: 
        !          1330: ULONG DrvSaveScreenBits(SURFOBJ *pso,ULONG iMode,ULONG ident,RECTL *prcl);
        !          1331: 
        !          1332: /*
        !          1333:  * Desktops
        !          1334:  */
        !          1335: 
        !          1336: VOID  DrvAssertMode(
        !          1337: DHPDEV dhpdev,
        !          1338: BOOL   bEnable);
        !          1339: 
        !          1340: ULONG DrvGetModes(
        !          1341: HANDLE    hDriver,
        !          1342: ULONG     cjSize,
        !          1343: DEVMODEW *pdm);
        !          1344: 
        !          1345: /*
        !          1346:  * Driver Info
        !          1347:  */
        !          1348: 
        !          1349: /*
        !          1350:  * Bitmaps
        !          1351:  */
        !          1352: 
        !          1353: HBITMAP DrvCreateDeviceBitmap (
        !          1354: DHPDEV dhpdev,
        !          1355: SIZEL  sizl,
        !          1356: ULONG  iFormat);
        !          1357: 
        !          1358: VOID  DrvDeleteDeviceBitmap(DHSURF dhsurf);
        !          1359: 
        !          1360: /*
        !          1361:  * Palettes
        !          1362:  */
        !          1363: 
        !          1364: BOOL DrvSetPalette(
        !          1365: DHPDEV  dhpdev,
        !          1366: PALOBJ *ppalo,
        !          1367: FLONG   fl,
        !          1368: ULONG   iStart,
        !          1369: ULONG   cColors);
        !          1370: 
        !          1371: /*
        !          1372:  * Brushes
        !          1373:  */
        !          1374: 
        !          1375: #define DM_DEFAULT    0x00000001
        !          1376: #define DM_MONOCHROME 0x00000002
        !          1377: 
        !          1378: BOOL EngHalftoneColor(
        !          1379: DHPDEV dhpdev,
        !          1380: ULONG  iMode,
        !          1381: ULONG  rgb,
        !          1382: ULONG *pul);
        !          1383: 
        !          1384: #define DCR_SOLID       0
        !          1385: #define DCR_DRIVER      1
        !          1386: #define DCR_HALFTONE    2
        !          1387: 
        !          1388: ULONG DrvDitherColor(
        !          1389: DHPDEV dhpdev,
        !          1390: ULONG  iMode,
        !          1391: ULONG  rgb,
        !          1392: ULONG *pul);
        !          1393: 
        !          1394: BOOL DrvRealizeBrush(
        !          1395: BRUSHOBJ *pbo,
        !          1396: SURFOBJ  *psoTarget,
        !          1397: SURFOBJ  *psoPattern,
        !          1398: SURFOBJ  *psoMask,
        !          1399: XLATEOBJ *pxlo,
        !          1400: ULONG    iHatch);
        !          1401: 
        !          1402: #define RB_DITHERCOLOR 0x80000000L
        !          1403: 
        !          1404: 
        !          1405: /*
        !          1406:  * Fonts
        !          1407:  */
        !          1408: 
        !          1409: PIFIMETRICS DrvQueryFont(
        !          1410: DHPDEV dhpdev,
        !          1411: ULONG  iFile,
        !          1412: ULONG  iFace,
        !          1413: ULONG  *pid);
        !          1414: 
        !          1415: // #define QFT_UNICODE     0L
        !          1416: #define QFT_LIGATURES   1L
        !          1417: #define QFT_KERNPAIRS   2L
        !          1418: #define QFT_GLYPHSET    3L
        !          1419: 
        !          1420: PVOID DrvQueryFontTree(
        !          1421: DHPDEV dhpdev,
        !          1422: ULONG  iFile,
        !          1423: ULONG  iFace,
        !          1424: ULONG  iMode,
        !          1425: ULONG  *pid);
        !          1426: 
        !          1427: #define QFD_GLYPHANDBITMAP  1L
        !          1428: #define QFD_GLYPHANDOUTLINE 2L
        !          1429: #define QFD_MAXEXTENTS      3L
        !          1430: #define QFD_MAXGLYPHBITMAP  4L
        !          1431: 
        !          1432: LONG DrvQueryFontData(
        !          1433: DHPDEV      dhpdev,
        !          1434: FONTOBJ    *pfo,
        !          1435: ULONG       iMode,
        !          1436: HGLYPH      hg,
        !          1437: GLYPHDATA  *pgd,
        !          1438: PVOID       pv,
        !          1439: ULONG       cjSize);
        !          1440: 
        !          1441: VOID DrvFree(
        !          1442: PVOID   pv,
        !          1443: ULONG   id);
        !          1444: 
        !          1445: VOID DrvDestroyFont(
        !          1446: FONTOBJ *pfo);
        !          1447: 
        !          1448: // Capability flags for DrvQueryCaps.
        !          1449: #define QC_OUTLINES             0x00000001
        !          1450: #define QC_1BIT                 0x00000002
        !          1451: #define QC_4BIT                 0x00000004
        !          1452: #define QC_8BIT                 0x00000008
        !          1453: #define QC_16BIT                0x00000010
        !          1454: #define QC_24BIT                0x00000020
        !          1455: #define QC_32BIT                0x00000040
        !          1456: 
        !          1457: LONG DrvQueryFontCaps(
        !          1458: ULONG   culCaps,
        !          1459: ULONG  *pulCaps);
        !          1460: 
        !          1461: ULONG DrvLoadFontFile(
        !          1462: PWSTR   pwszFontFile,
        !          1463: PWSTR   pwszScratchDir,
        !          1464: ULONG   ulLangID);
        !          1465: 
        !          1466: BOOL DrvUnloadFontFile(
        !          1467: ULONG   iFile);
        !          1468: 
        !          1469: LONG DrvQueryTrueTypeTable(
        !          1470: ULONG   iFile,
        !          1471: ULONG   ulFont,
        !          1472: ULONG   ulTag,
        !          1473: PTRDIFF dpStart,
        !          1474: ULONG   cjBuf,
        !          1475: BYTE   *pjBuf);
        !          1476: 
        !          1477: BOOL DrvQueryAdvanceWidths(
        !          1478: DHPDEV   dhpdev,
        !          1479: FONTOBJ *pfo,
        !          1480: ULONG    iMode,
        !          1481: HGLYPH  *phg,
        !          1482: PVOID    pvWidths,
        !          1483: ULONG    cGlyphs);
        !          1484: 
        !          1485: // Values for iMode
        !          1486: 
        !          1487: #define QAW_GETWIDTHS       0
        !          1488: #define QAW_GETEASYWIDTHS   1
        !          1489: 
        !          1490: LONG DrvQueryTrueTypeOutline(
        !          1491: DHPDEV      dhpdev,
        !          1492: FONTOBJ    *pfo,
        !          1493: HGLYPH      hglyph,
        !          1494: BOOL        bMetricsOnly,
        !          1495: GLYPHDATA  *pgldt,
        !          1496: ULONG       cjBuf,
        !          1497: TTPOLYGONHEADER *ppoly);
        !          1498: 
        !          1499: PVOID DrvGetTrueTypeFile (
        !          1500: ULONG   iFile,
        !          1501: ULONG  *pcj);
        !          1502: 
        !          1503: // values for ulMode:
        !          1504: 
        !          1505: #define QFF_DESCRIPTION     1L
        !          1506: #define QFF_NUMFACES        2L
        !          1507: 
        !          1508: LONG DrvQueryFontFile(
        !          1509: ULONG   iFile,
        !          1510: ULONG   ulMode,
        !          1511: ULONG   cjBuf,
        !          1512: ULONG  *pulBuf);
        !          1513: 
        !          1514: /*
        !          1515:  * BitBlt
        !          1516:  */
        !          1517: 
        !          1518: BOOL DrvBitBlt(
        !          1519: SURFOBJ  *psoTrg,
        !          1520: SURFOBJ  *psoSrc,
        !          1521: SURFOBJ  *psoMask,
        !          1522: CLIPOBJ  *pco,
        !          1523: XLATEOBJ *pxlo,
        !          1524: RECTL    *prclTrg,
        !          1525: POINTL   *pptlSrc,
        !          1526: POINTL   *pptlMask,
        !          1527: BRUSHOBJ *pbo,
        !          1528: POINTL   *pptlBrush,
        !          1529: ROP4      rop4);
        !          1530: 
        !          1531: BOOL DrvStretchBlt(
        !          1532: SURFOBJ         *psoDest,
        !          1533: SURFOBJ         *psoSrc,
        !          1534: SURFOBJ         *psoMask,
        !          1535: CLIPOBJ         *pco,
        !          1536: XLATEOBJ        *pxlo,
        !          1537: COLORADJUSTMENT *pca,
        !          1538: POINTL          *pptlHTOrg,
        !          1539: RECTL           *prclDest,
        !          1540: RECTL           *prclSrc,
        !          1541: POINTL          *pptlMask,
        !          1542: ULONG            iMode);
        !          1543: 
        !          1544: BOOL DrvPlgBlt(
        !          1545: SURFOBJ         *psoDest,
        !          1546: SURFOBJ         *psoSrc,
        !          1547: SURFOBJ         *psoMask,
        !          1548: CLIPOBJ         *pco,
        !          1549: XLATEOBJ        *pxlo,
        !          1550: COLORADJUSTMENT *pca,
        !          1551: POINTL          *pptlHTOrg,
        !          1552: POINTFIX        *pptfxDest,
        !          1553: RECTL           *prclSrc,
        !          1554: POINTL          *pptlMask,
        !          1555: ULONG            iMode);
        !          1556: 
        !          1557: BOOL DrvCopyBits(
        !          1558: SURFOBJ  *psoDest,
        !          1559: SURFOBJ  *psoSrc,
        !          1560: CLIPOBJ  *pco,
        !          1561: XLATEOBJ *pxlo,
        !          1562: RECTL    *prclDest,
        !          1563: POINTL   *pptlSrc);
        !          1564: 
        !          1565: /*
        !          1566:  * Text Output
        !          1567:  */
        !          1568: 
        !          1569: BOOL DrvTextOut(
        !          1570: SURFOBJ  *pso,
        !          1571: STROBJ   *pstro,
        !          1572: FONTOBJ  *pfo,
        !          1573: CLIPOBJ  *pco,
        !          1574: RECTL    *prclExtra,
        !          1575: RECTL    *prclOpaque,
        !          1576: BRUSHOBJ *pboFore,
        !          1577: BRUSHOBJ *pboOpaque,
        !          1578: POINTL   *pptlOrg,
        !          1579: MIX       mix);
        !          1580: 
        !          1581: /*
        !          1582:  * Graphics Output
        !          1583:  */
        !          1584: 
        !          1585: BOOL DrvStrokePath(
        !          1586: SURFOBJ   *pso,
        !          1587: PATHOBJ   *ppo,
        !          1588: CLIPOBJ   *pco,
        !          1589: XFORMOBJ  *pxo,
        !          1590: BRUSHOBJ  *pbo,
        !          1591: POINTL    *pptlBrushOrg,
        !          1592: LINEATTRS *plineattrs,
        !          1593: MIX        mix);
        !          1594: 
        !          1595: #define FP_ALTERNATEMODE    1L
        !          1596: #define FP_WINDINGMODE      2L
        !          1597: 
        !          1598: BOOL DrvFillPath(
        !          1599: SURFOBJ  *pso,
        !          1600: PATHOBJ  *ppo,
        !          1601: CLIPOBJ  *pco,
        !          1602: BRUSHOBJ *pbo,
        !          1603: POINTL   *pptlBrushOrg,
        !          1604: MIX       mix,
        !          1605: FLONG     flOptions);
        !          1606: 
        !          1607: BOOL DrvStrokeAndFillPath(
        !          1608: SURFOBJ   *pso,
        !          1609: PATHOBJ   *ppo,
        !          1610: CLIPOBJ   *pco,
        !          1611: XFORMOBJ  *pxo,
        !          1612: BRUSHOBJ  *pboStroke,
        !          1613: LINEATTRS *plineattrs,
        !          1614: BRUSHOBJ  *pboFill,
        !          1615: POINTL    *pptlBrushOrg,
        !          1616: MIX        mixFill,
        !          1617: FLONG      flOptions);
        !          1618: 
        !          1619: BOOL DrvPaint(
        !          1620: SURFOBJ  *pso,
        !          1621: CLIPOBJ  *pco,
        !          1622: BRUSHOBJ *pbo,
        !          1623: POINTL   *pptlBrushOrg,
        !          1624: MIX       mix);
        !          1625: 
        !          1626: /*
        !          1627:  * Object Data (LOGBRUSHs and LOGPENs)
        !          1628:  */
        !          1629: 
        !          1630: ULONG DrvQueryObjectData(
        !          1631: DHPDEV  dhpdev,
        !          1632: ULONG   iObjectType,
        !          1633: ULONG   cObjects,
        !          1634: PVOID   pvObjects);
        !          1635: 
        !          1636: /*
        !          1637:  * Pointers
        !          1638:  */
        !          1639: 
        !          1640: #define SPS_ERROR               0
        !          1641: #define SPS_DECLINE             1
        !          1642: #define SPS_ACCEPT_NOEXCLUDE    2
        !          1643: #define SPS_ACCEPT_EXCLUDE      3
        !          1644: 
        !          1645: #define SPS_CHANGE        0x00000001L
        !          1646: #define SPS_ASYNCCHANGE   0x00000002L
        !          1647: #define SPS_ANIMATESTART  0x00000004L
        !          1648: #define SPS_ANIMATEUPDATE 0x00000008L
        !          1649: 
        !          1650: ULONG DrvSetPointerShape(
        !          1651: SURFOBJ  *pso,
        !          1652: SURFOBJ  *psoMask,
        !          1653: SURFOBJ  *psoColor,
        !          1654: XLATEOBJ *pxlo,
        !          1655: LONG      xHot,
        !          1656: LONG      yHot,
        !          1657: LONG      x,
        !          1658: LONG      y,
        !          1659: RECTL    *prcl,
        !          1660: FLONG     fl);
        !          1661: 
        !          1662: VOID DrvMovePointer(SURFOBJ *pso,LONG x,LONG y,RECTL *prcl);
        !          1663: 
        !          1664: /*
        !          1665:  * Printing
        !          1666:  */
        !          1667: 
        !          1668: BOOL  DrvSendPage(SURFOBJ *pso);
        !          1669: BOOL  DrvStartPage(SURFOBJ *pso);
        !          1670: 
        !          1671: ULONG DrvEscape(
        !          1672: SURFOBJ *pso,
        !          1673: ULONG    iEsc,
        !          1674: ULONG    cjIn,
        !          1675: PVOID    pvIn,
        !          1676: ULONG    cjOut,
        !          1677: PVOID    pvOut);
        !          1678: 
        !          1679: #define ESC_CLIPCHANGE  0x80000000
        !          1680: 
        !          1681: ULONG DrvDrawEscape(
        !          1682: SURFOBJ *pso,
        !          1683: ULONG    iEsc,
        !          1684: CLIPOBJ *pco,
        !          1685: RECTL   *prcl,
        !          1686: ULONG    cjIn,
        !          1687: PVOID    pvIn);
        !          1688: 
        !          1689: BOOL  DrvStartDoc(
        !          1690: SURFOBJ *pso,
        !          1691: PWSTR    pwszDocName,
        !          1692: DWORD   dwJobId);
        !          1693: 
        !          1694: #define ED_ABORTDOC    1
        !          1695: 
        !          1696: BOOL  DrvEndDoc(SURFOBJ *pso, FLONG fl);
        !          1697: 
        !          1698: ULONG DrvGetGlyphMode(DHPDEV, FONTOBJ *);
        !          1699: 
        !          1700: ULONG DrvFontManagement(
        !          1701: SURFOBJ *pso,
        !          1702: FONTOBJ *pfo,
        !          1703: ULONG    iMode,
        !          1704: ULONG    cjIn,
        !          1705: PVOID    pvIn,
        !          1706: ULONG    cjOut,
        !          1707: PVOID    pvOut);
        !          1708: 
        !          1709: /*
        !          1710:  * Function prototypes - Engine Simulations
        !          1711:  */
        !          1712: 
        !          1713: BOOL EngBitBlt(
        !          1714: SURFOBJ  *psoTrg,
        !          1715: SURFOBJ  *psoSrc,
        !          1716: SURFOBJ  *psoMask,
        !          1717: CLIPOBJ  *pco,
        !          1718: XLATEOBJ *pxlo,
        !          1719: RECTL    *prclTrg,
        !          1720: POINTL   *pptlSrc,
        !          1721: POINTL   *pptlMask,
        !          1722: BRUSHOBJ *pbo,
        !          1723: POINTL   *pptlBrush,
        !          1724: ROP4      rop4);
        !          1725: 
        !          1726: BOOL EngStretchBlt(
        !          1727: SURFOBJ         *psoDest,
        !          1728: SURFOBJ         *psoSrc,
        !          1729: SURFOBJ         *psoMask,
        !          1730: CLIPOBJ         *pco,
        !          1731: XLATEOBJ        *pxlo,
        !          1732: COLORADJUSTMENT *pca,
        !          1733: POINTL          *pptlHTOrg,
        !          1734: RECTL           *prclDest,
        !          1735: RECTL           *prclSrc,
        !          1736: POINTL          *pptlMask,
        !          1737: ULONG            iMode);
        !          1738: 
        !          1739: BOOL EngPlgBlt(
        !          1740: SURFOBJ         *psoDest,
        !          1741: SURFOBJ         *psoSrc,
        !          1742: SURFOBJ         *psoMask,
        !          1743: CLIPOBJ         *pco,
        !          1744: XLATEOBJ        *pxlo,
        !          1745: COLORADJUSTMENT *pca,
        !          1746: POINTL          *pptlHTOrg,
        !          1747: POINTFIX        *pptfxDest,
        !          1748: RECTL           *prclSrc,
        !          1749: POINTL          *pptlMask,
        !          1750: ULONG            iMode);
        !          1751: 
        !          1752: BOOL EngTextOut(
        !          1753: SURFOBJ  *pso,
        !          1754: STROBJ   *pstro,
        !          1755: FONTOBJ  *pfo,
        !          1756: CLIPOBJ  *pco,
        !          1757: RECTL    *prclExtra,
        !          1758: RECTL    *prclOpaque,
        !          1759: BRUSHOBJ *pboFore,
        !          1760: BRUSHOBJ *pboOpaque,
        !          1761: POINTL   *pptlOrg,
        !          1762: MIX       mix);
        !          1763: 
        !          1764: BOOL EngStrokePath(
        !          1765: SURFOBJ   *pso,
        !          1766: PATHOBJ   *ppo,
        !          1767: CLIPOBJ   *pco,
        !          1768: XFORMOBJ  *pxo,
        !          1769: BRUSHOBJ  *pbo,
        !          1770: POINTL    *pptlBrushOrg,
        !          1771: LINEATTRS *plineattrs,
        !          1772: MIX        mix);
        !          1773: 
        !          1774: BOOL EngFillPath(
        !          1775: SURFOBJ  *pso,
        !          1776: PATHOBJ  *ppo,
        !          1777: CLIPOBJ  *pco,
        !          1778: BRUSHOBJ *pbo,
        !          1779: POINTL   *pptlBrushOrg,
        !          1780: MIX       mix,
        !          1781: FLONG     flOptions);
        !          1782: 
        !          1783: BOOL EngStrokeAndFillPath(
        !          1784: SURFOBJ   *pso,
        !          1785: PATHOBJ   *ppo,
        !          1786: CLIPOBJ   *pco,
        !          1787: XFORMOBJ  *pxo,
        !          1788: BRUSHOBJ  *pboStroke,
        !          1789: LINEATTRS *plineattrs,
        !          1790: BRUSHOBJ  *pboFill,
        !          1791: POINTL    *pptlBrushOrg,
        !          1792: MIX        mixFill,
        !          1793: FLONG      flOptions);
        !          1794: 
        !          1795: BOOL EngPaint(
        !          1796: SURFOBJ  *pso,
        !          1797: CLIPOBJ  *pco,
        !          1798: BRUSHOBJ *pbo,
        !          1799: POINTL   *pptlBrushOrg,
        !          1800: MIX       mix);
        !          1801: 
        !          1802: BOOL EngCopyBits(
        !          1803: SURFOBJ  *psoDest,
        !          1804: SURFOBJ  *psoSrc,
        !          1805: CLIPOBJ  *pco,
        !          1806: XLATEOBJ *pxlo,
        !          1807: RECTL    *prclDest,
        !          1808: POINTL   *pptlSrc);
        !          1809: 
        !          1810: #define PPB_NOCLIP 0x0001
        !          1811: 
        !          1812: 
        !          1813: //
        !          1814: // Halftone releated APIs
        !          1815: //
        !          1816: 
        !          1817: 
        !          1818: LONG
        !          1819: APIENTRY
        !          1820: HT_ComputeRGBGammaTable(
        !          1821:     USHORT  GammaTableEntries,
        !          1822:     USHORT  GammaTableType,
        !          1823:     USHORT  RedGamma,
        !          1824:     USHORT  GreenGamma,
        !          1825:     USHORT  BlueGamma,
        !          1826:     LPBYTE  pGammaTable
        !          1827:     );
        !          1828: 
        !          1829: LONG
        !          1830: APIENTRY
        !          1831: HT_Get8BPPFormatPalette(
        !          1832:     LPPALETTEENTRY  pPaletteEntry,
        !          1833:     USHORT          RedGamma,
        !          1834:     USHORT          GreenGamma,
        !          1835:     USHORT          BlueGamma
        !          1836:     );
        !          1837: 
        !          1838: 
        !          1839: typedef struct _DEVHTINFO {
        !          1840:     DWORD       HTFlags;
        !          1841:     DWORD       HTPatternSize;
        !          1842:     DWORD       DevPelsDPI;
        !          1843:     COLORINFO   ColorInfo;
        !          1844:     } DEVHTINFO, *PDEVHTINFO;
        !          1845: 
        !          1846: #define DEVHTADJF_COLOR_DEVICE      0x00000001
        !          1847: #define DEVHTADJF_ADDITIVE_DEVICE   0x00000002
        !          1848: 
        !          1849: typedef struct _DEVHTADJDATA {
        !          1850:     DWORD       DeviceFlags;
        !          1851:     DWORD       DeviceXDPI;
        !          1852:     DWORD       DeviceYDPI;
        !          1853:     PDEVHTINFO  pDefHTInfo;
        !          1854:     PDEVHTINFO  pAdjHTInfo;
        !          1855:     } DEVHTADJDATA, *PDEVHTADJDATA;
        !          1856: 
        !          1857: LONG
        !          1858: APIENTRY
        !          1859: HTUI_DeviceColorAdjustment(
        !          1860:     LPSTR           pDeviceName,
        !          1861:     PDEVHTADJDATA   pDevHTAdjData
        !          1862:     );
        !          1863: 
        !          1864: 
        !          1865: #endif  //  _WINDDI_

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.