home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / header45.zip / pmddi.h < prev    next >
C/C++ Source or Header  |  1999-04-30  |  50KB  |  1,479 lines

  1. /****************************** Module Header ******************************\
  2. *
  3. * Module Name: PMDDI.H
  4. *
  5. * OS/2 Presentation Manager entry points, macros, and types for the
  6. * Graphics Engine.
  7. *
  8. * Copyright (c) International Business Machines Corporation 1981, 1988-1992
  9. *
  10. * ===========================================================================
  11. *
  12. * The following symbols are used in this file for conditional sections.
  13. *
  14. *   #define:                To include:
  15. *
  16. *   INCL_DDIGRE             don't want OS2DEF, PMGPI, and PMDEV included
  17. *   INCL_DDIDEFS            don't want the above, but do want GRE structs
  18. *
  19. * It is expected that callers of the Engine will want to define INCL_DDIGRE
  20. * and possibly INCL_DDIDEFS.  The Engine itself and device drivers define
  21. * neither of these.
  22. *
  23. * Further defines must be made to specify which of the GRE function macros
  24. * should be defined.
  25. *
  26. *   #define:                To include:
  27. *
  28. *   INCL_GREALL           All of the following
  29. *   INCL_GRE_ARCS         Arcs functions
  30. *   INCL_GRE_BITMAPS      Bitmap functions
  31. *   INCL_GRE_CLIP            etc...
  32. *   INCL_GRE_COLORTABLE
  33. *   INCL_GRE_DCS
  34. *   INCL_GRE_PAX
  35. *   INCL_GRE_DEVICE
  36. *   INCL_GRE_DEVMISC
  37. *   INCL_GRE_DEVSUPPORT
  38. *   INCL_GRE_FONTS
  39. *   INCL_GRE_INKPATH
  40. *   INCL_GRE_JOURNALING
  41. *   INCL_GRE_LCID
  42. *   INCL_GRE_LINES
  43. *   INCL_GRE_MARKERS
  44. *   INCL_GRE_PALETTE
  45. *   INCL_GRE_PATHS
  46. *   INCL_GRE_PICK
  47. *   INCL_GRE_POLYGON
  48. *   INCL_GRE_REGIONS
  49. *   INCL_GRE_SCANS
  50. *   INCL_GRE_SETID
  51. *   INCL_GRE_STRINGS
  52. *   INCL_GRE_XFORMS
  53. *
  54. * ===========================================================================
  55. *
  56. * Comments at the end of each typedef line give the name tags used in
  57. * the assembler include version of this file.
  58. *
  59. * The assembler include version of this file excludes lines between NOINC
  60. * and INC comments.
  61. *
  62. \***************************************************************************/
  63. /* NOINC */
  64. #if __IBMC__ || __IBMCPP__
  65.    #pragma info( none )
  66.    #ifndef __CHKHDR__
  67.       #pragma info( none )
  68.    #endif
  69.    #pragma info( restore )
  70. #endif
  71. #ifdef __cplusplus
  72.       extern "C" {
  73. #endif
  74. /* INC */
  75.  
  76.  
  77. #ifdef INCL_GREALL
  78.    #define INCL_GRE_ARCS
  79.    #define INCL_GRE_BITMAPS
  80.    #define INCL_GRE_CLIP
  81.    #define INCL_GRE_COLORTABLE
  82.    #define INCL_GRE_DCS
  83.    #define INCL_GRE_PAX
  84.    #define INCL_GRE_DEVICE
  85.    #define INCL_GRE_DEVMISC
  86.    #define INCL_GRE_DEVSUPPORT
  87.    #define INCL_GRE_FONTS
  88.    #define INCL_GRE_INKPATH
  89.    #define INCL_GRE_JOURNALING
  90.    #define INCL_GRE_LCID
  91.    #define INCL_GRE_LINES
  92.    #define INCL_GRE_MARKERS
  93.    #define INCL_GRE_PALETTE
  94.    #define INCL_GRE_PATHS
  95.    #define INCL_GRE_PICK
  96.    #define INCL_GRE_POLYGON
  97.    #define INCL_GRE_REGIONS
  98.    #define INCL_GRE_SCANS
  99.    #define INCL_GRE_SCREEN
  100.    #define INCL_GRE_SETID
  101.    #define INCL_GRE_STRINGS
  102.    #define INCL_GRE_XFORMS
  103. #endif /* INCL_GREALL */
  104.  
  105. #ifdef INCL_GRE_DEVMISC
  106.    #define INCL_GRE_DEVMISC1
  107.    #define INCL_GRE_DEVMISC2
  108.    #define INCL_GRE_DEVMISC3
  109. #endif  /* INCL_GRE_DEVMISC */
  110.  
  111. #ifdef INCL_VMANDDI
  112.    #define INCL_DDIBUNDLES
  113. #endif  /* INCL_VMANDDI */
  114.  
  115. /*** Engine dispatch tables ************************************************/
  116.  
  117. #define MAXTABLEENTRIES        223
  118. #define NUMBEROFMAJORFUN       MAXTABLEENTRIES
  119. #define NUMBEROFMINORFUN       86
  120.  
  121. typedef struct _DISPATCHER    /* dr */
  122. {
  123.    PFN    pfnTblEntry[MAXTABLEENTRIES];
  124. } DISPATCHER;
  125. typedef DISPATCHER *PDISPATCHER;
  126.  
  127. typedef struct _FUNINFOTABLE    /* fit */
  128. {
  129.    BYTE   FunInfo_00[NUMBEROFMAJORFUN];
  130.    BYTE   FunInfo_02[NUMBEROFMINORFUN];
  131. } FUNINFOTABLE;
  132. typedef FUNINFOTABLE *PFUNINFOTABLE;
  133.  
  134. /*** exported Engine DDI functions *****************************************/
  135.  
  136. LONG  APIENTRY SetDriverInfo(ULONG hDrv,
  137.                              LHANDLE hEng,
  138.                              ULONG ulIndex,
  139.                              HDC hdc);
  140.  
  141. LONG  APIENTRY GetDriverInfo(LHANDLE hEng,
  142.                              ULONG ulIndex,
  143.                              HDC hdc);
  144.  
  145. #ifdef __cplusplus
  146. LONG  APIENTRY PostDeviceModes(PDRIVDATA pDrvData,
  147.                                PCSZ  pszDrvName,
  148.                                PCSZ  pszDevName,
  149.                                PCSZ  pszPrtName,
  150.                                ULONG ulOptions);
  151. #else
  152. LONG  APIENTRY PostDeviceModes(PDRIVDATA pDrvData,
  153.                                PSZ pszDrvName,
  154.                                PSZ pszDevName,
  155.                                PSZ pszPrtName,
  156.                                ULONG ulOptions);
  157. #endif
  158.  
  159. #ifdef __cplusplus
  160. LONG  APIENTRY PostEscape(PCSZ  pszDrvName,
  161.                           PCSZ  pszDevName,
  162.                           PCSZ  pszQueueName,
  163.                           PCSZ  pszSplPrinterName,
  164.                           ULONG ulFuncNum,
  165.                           ULONG cbParm1,
  166.                           PBYTE pbParm1,
  167.                           ULONG cpParm2,
  168.                           PBYTE pbParm2);
  169. #else
  170. LONG  APIENTRY PostEscape(PSZ pszDrvName,
  171.                           PSZ pszDevName,
  172.                           PSZ pszQueueName,
  173.                           PSZ pszSplPrinterName,
  174.                           ULONG ulFuncNum,
  175.                           ULONG cbParm1,
  176.                           PBYTE pbParm1,
  177.                           ULONG cpParm2,
  178.                           PBYTE pbParm2);
  179. #endif
  180.  
  181. BOOL  APIENTRY GreInitialize(VOID);
  182.  
  183. ULONG APIENTRY SSAllocMem(PVOID ppAddr,
  184.                           ULONG ulSize,
  185.                           ULONG ulReserved);
  186.  
  187. ULONG APIENTRY SSFreeMem(PVOID pAddr);
  188.  
  189. /*** define common types in the Engine and DDI *****************************/
  190.  
  191. typedef struct _RECTS   /* rcs */
  192. {
  193.    POINTS pts1;
  194.    POINTS pts2;
  195. } RECTS;
  196. typedef RECTS *PRECTS;
  197.  
  198. /* NOINC */
  199. #ifndef POINTFX_DEFINED
  200.    #define POINTFX_DEFINED
  201.    /* INC */
  202.    typedef struct _POINTFX   /* ptfx */
  203.    {
  204.       FIXED x;
  205.       FIXED y;
  206.    } POINTFX;
  207.    typedef POINTFX *PPOINTFX;
  208.    /* NOINC */
  209. #endif
  210. /* INC */
  211.  
  212. typedef struct _RECTFX   /* rcfx */
  213. {
  214.    POINTFX ptfx1;
  215.    POINTFX ptfx2;
  216. } RECTFX;
  217. typedef RECTFX *PRECTFX;
  218.  
  219. typedef struct _XFORM   /* xform */
  220. {
  221.    FIXED fxM11;
  222.    FIXED fxM12;
  223.    FIXED fxM21;
  224.    FIXED fxM22;
  225.    LONG  lM41;
  226.    LONG  lM42;
  227. } XFORM;
  228. typedef XFORM *PXFORM;
  229.  
  230. typedef LONG LCID;      /* locally-coded id */
  231. typedef LCID *PLCID;
  232. typedef LONG PHID;      /* path id */
  233. typedef ULONG HDEVPAL;
  234.  
  235. #ifdef INCL_GRE_HFONT
  236.    typedef LHANDLE HFONT;       /* font handle */
  237. #endif /* INCL_GRE_HFONT */
  238.  
  239. #ifdef INCL_DDICOMFLAGS
  240.    #define COM_DRAW16                      0x00000001L
  241.    #define COM_BOUND16                     0x00000002L
  242.    #define COM_CORRELATE16                 0x00000004L
  243.    #define COM_ALT_BOUND16                 0x00000008L
  244.    #define COM_AREA16                      0x00000010L
  245.    #define COM_PATH16                      0x00000020L
  246.    #define COM_TRANSFORM16                 0x00000040L
  247.    #define COM_RECORDING16                 0x00000080L
  248.    #define COM_DEVICE16                    0x00000100L
  249.    #define COM_SCR_BOUND16                 0x00000200L
  250.    #define COM_PRECLIP16                   0x04000000L
  251.    
  252.    #define COM_DRAW                        0x00010000L
  253.    #define COM_BOUND                       0x00020000L
  254.    #define COM_CORRELATE                   0x00040000L
  255.    #define COM_ALT_BOUND                   0x00080000L
  256.    #define COM_AREA                        0x00100000L
  257.    #define COM_PATH                        0x00200000L
  258.    #define COM_TRANSFORM                   0x00400000L
  259.    #define COM_RECORDING                   0x00800000L
  260.    #define COM_DEVICE                      0x01000000L
  261.    #define COM_SCR_BOUND                   0x02000000L
  262.    #define COM_PRECLIP                     0x04000000L
  263. #endif /* INCL_DDICOMFLAGS */
  264.  
  265. #ifdef INCL_GRE_ARCS
  266.    
  267.    /* BoxBoundary */
  268.    /* BoxInterior */
  269.    /* BoxBoth */
  270.    
  271.    typedef struct _BOXPARAMS      /* boxp */
  272.    {
  273.       POINTL ptl;
  274.       SIZEL  sizl;
  275.    } BOXPARAMS;
  276.    typedef BOXPARAMS *PBOXPARAMS;
  277. #endif /* INCL_GRE_ARCS */
  278.  
  279. #ifdef INCL_GRE_CLIP
  280.    
  281.    /* CopyClipRegion */
  282.    
  283.    #define COPYCRGN_ALLINTERSECT        0L
  284.    #define COPYCRGN_VISRGN              1L
  285.    #define COPYCRGN_CLIPRGN             2L
  286.    
  287.    /* SetupDC */
  288.    
  289.    #define SETUPDC_VISRGN               0x00000001L
  290.    #define SETUPDC_ORIGIN               0x00000002L
  291.    #define SETUPDC_ACCUMBOUNDSON        0x00000004L
  292.    #define SETUPDC_ACCUMBOUNDSOFF       0x00000008L
  293.    #define SETUPDC_RECALCCLIP           0x00000010L
  294.    #define SETUPDC_SETOWNER             0x00000020L
  295.    #define SETUPDC_CLEANDC              0x00000040L
  296.    
  297. #endif /* INCL_GRE_CLIP */
  298.  
  299. #ifdef INCL_GRE_XFORMS
  300.    
  301.    /* QueryViewportSize */
  302.    typedef struct _VIEWPORTSIZE   /* vs */
  303.    {
  304.       ULONG cx;
  305.       ULONG cy;
  306.    } VIEWPORTSIZE;
  307.    typedef VIEWPORTSIZE *PVIEWPORTSIZE;
  308.    
  309. #endif /* INCL_GRE_XFORMS */
  310.  
  311. #ifdef INCL_GRE_DEVSUPPORT
  312.    
  313.    /* Constants for GreInitializeAttributes */
  314.    
  315.    #define INAT_DEFAULTATTRIBUTES       1L
  316.    #define INAT_CURRENTATTRIBUTES       2L
  317.    
  318.    /* InvalidateVisRegion */
  319.    
  320.    typedef struct _DC_BLOCK   /* ivr */
  321.    {
  322.       ULONG hdc;
  323.       ULONG hddc;
  324.    } DC_BLOCK;
  325.    typedef DC_BLOCK *PDC_BLOCK;
  326.    
  327.    /* Constants for DeviceEnableYInversion */
  328.    
  329.    #define CAP_YINVERT_NONE                 0x00000000L
  330.    #define CAP_YINVERT_CHARSTRINGPOS        0x00000001L
  331.    #define CAP_YINVERT_CHARSTRING           0x00000002L
  332.    #define CAP_YINVERT_QUERYTEXTBOX         0x00000004L
  333.    #define CAP_YINVERT_QUERYCHARPOSITIONS   0x00000008L
  334.    #define CAP_YINVERT_DEVICEQUERYFONTS     0x00000010L
  335.    #define CAP_YINVERT_DONTCARE             0x80000000L
  336.    #define CAP_YINVERT_IMPLEMENTED          CAP_YINVERT_CHARSTRINGPOS
  337.    
  338. #endif /* INCL_GRE_DEVSUPPORT */
  339.  
  340. #ifdef INCL_GRE_FONTS
  341.    
  342.    /* QueryCodePageObject */
  343.    
  344.    typedef ULONG GLYPH;
  345.    typedef ULONG *PGLYPH;
  346.    
  347.    /* NOINC */
  348.    typedef  ULONG (* APIENTRY PXLATECHAR)(PVOID object,
  349.                    ULONG ulCod,
  350.                    PGLYPH pGly);
  351.    typedef  ULONG (* APIENTRY PXLATESTRING)(PVOID object,
  352.                    PUCHAR pchCod,
  353.                    ULONG  ulCodLen,
  354.                    PGLYPH pGly,
  355.                    PULONG pulGlyLen,
  356.                    ULONG flOptions);
  357.    typedef  ULONG (* APIENTRY PINVXLATECHAR)(PVOID object,
  358.                    GLYPH gGly,
  359.                    PULONG pulCod);
  360.    typedef  ULONG (* APIENTRY PINVXLATESTRING)(PVOID object,
  361.                    PGLYPH pGly,
  362.                    ULONG ulGlyLen,
  363.                    PUCHAR pchCod,
  364.                    PULONG pulCodLen,
  365.                    ULONG flOptions);
  366.    typedef struct _CPOBJMEMBERS    /* cpm */
  367.    {
  368.       PXLATECHAR  pfnXlateChar;
  369.       PXLATESTRING pfnXlateString;
  370.       PINVXLATECHAR pfnInvXlateChar;
  371.       PINVXLATESTRING pfnInvXlateString;
  372.    } CPOBJMEMBERS;
  373.    typedef CPOBJMEMBERS *PCPOBJMEMBERS;
  374.    
  375.    typedef struct _CODEPAGEOBJECT    /* cpo */
  376.    {
  377.       ULONG    Identity;
  378.       ULONG    ulCodePage;
  379.       UCHAR    szGlyphList[16];
  380.       ULONG    fl;
  381.       PUCHAR   pDbcsEnv;
  382.       ULONG    ulReserved;
  383.       CPOBJMEMBERS Member;
  384.    } CODEPAGEOBJECT;
  385.    typedef CODEPAGEOBJECT *PCODEPAGEOBJECT;
  386.    /* INC */
  387.    
  388.    #define  CPO_SBCS_CODEPAGE    0x00000001L
  389.    #define  CPO_MBCS_CODEPAGE    0x00000002L
  390.    #define  CPO_DBCS_CODEPAGE    0x00000004L
  391.    
  392. #endif /* INCL_GRE_FONTS */
  393.  
  394. #ifdef INCL_GRE_STRINGS
  395.    
  396.    /* QueryCharoutline */
  397.    
  398.    #define  QCO_FORMAT_GOCA      0x00000001L
  399.    #define  QCO_FORMAT_IFI       0x00000002L
  400.    #define  QCO_NO_TRANSFORM     0x00000004L
  401.    #define  QCO_UNICODE          0x00000008L
  402.    
  403.    /* QueryCharMetricsTable */
  404.    
  405.    typedef struct _CHARMETRICS    /* cm */
  406.    {
  407.       LONG     lA;
  408.       ULONG    ulB;
  409.       LONG     lC;
  410.       RECTL    rclBoundBox;
  411.    } CHARMETRICS;
  412.    typedef CHARMETRICS *PCHARMETRICS;
  413.    
  414.    #define QCMT_NO_TRANSFORM     0x00000001L
  415.    
  416.    /* RealizeString */
  417.    
  418.    #define RS_NO_TRANSLATION     0x00000001L
  419.    #define RS_UNICODE            0x00000002L
  420.    #define RS_FONT_CACHE         0x00000004L
  421.    #define RS_CREATE_FTA         0x00000008L
  422.    #define RS_DESTROY_FTA        0x00000010L
  423.    #define RS_DELETE_CHARS       0x00000020L
  424.    #define RS_COPY_CHARS         0x00000040L
  425.    
  426. #endif /* INCL_GRE_STRINGS */
  427.  
  428. #ifdef INCL_DDIMISC
  429.    
  430.    /* Display information resource structure (RT_DISPLAYINFO) */
  431.    typedef struct _DISPLAYINFO           /* dspinfo */
  432.    {
  433.       USHORT cb;
  434.       SHORT cxIcon;
  435.       SHORT cyIcon;
  436.       SHORT cxPointer;
  437.       SHORT cyPointer;
  438.       SHORT cxBorder;
  439.       SHORT cyBorder;
  440.       SHORT cxHSlider;
  441.       SHORT cyVSlider;
  442.       SHORT cxSizeBorder;
  443.       SHORT cySizeBorder;
  444.       SHORT cxDeviceAlign;
  445.       SHORT cyDeviceAlign;
  446.    } DISPLAYINFO;
  447.    typedef DISPLAYINFO *PDISPLAYINFO;
  448.    
  449.    /* Parameters for the DC Enable function */
  450.    
  451.    typedef struct _DENPARAMS   /* den */
  452.    {
  453.       ULONG ulStateInfo;
  454.       ULONG ulType;
  455.       ULONG ulHDC;
  456.    } DENPARAMS;
  457.    typedef DENPARAMS *PDENPARAMS;
  458.    
  459.    
  460.    typedef struct _STYLERATIO   /* sr */
  461.    {
  462.       BYTE dx;
  463.       BYTE dy;
  464.    } STYLERATIO;
  465.    typedef STYLERATIO *PSTYLERATIO;
  466.    
  467.    /* Options flags for SetGlobalAttribute */
  468.    
  469.    #define GATTR_DEFAULT                   1L
  470.    
  471.    /* Attribute Types for SetGlobalAttribute */
  472.    
  473.    #define ATYPE_COLOR                     1L
  474.    #define ATYPE_BACK_COLOR                2L
  475.    #define ATYPE_MIX_MODE                  3L
  476.    #define ATYPE_BACK_MIX_MODE             4L
  477.    
  478.    /* Options for CharStringPos */
  479.    
  480.    #define CHS_START_XY                    0x00000020L
  481.    #define CHS_ATTR_INFO                   0x00000040L
  482.    
  483.    typedef struct _CSP_INFO   /* csp */
  484.    {
  485.       LONG  cSize;
  486.       LONG  lColor;
  487.       LONG  lBackColor;
  488.    } CSP_INFO;
  489.    typedef CSP_INFO *PCSP_INFO;
  490.    
  491.    /* Set/GetProcessControl */
  492.    
  493.    #define PCTL_DRAW                       0x00000001L
  494.    #define PCTL_BOUND                      0x00000002L
  495.    #define PCTL_CORRELATE                  0x00000004L
  496.    #define PCTL_USERBOUNDS                 0x00000008L
  497.    #define PCTL_AREA                       0x00000010L
  498.    
  499.    /* ResetBounds */
  500.    
  501.    #define RB_GPI                          0x00000001L
  502.    #define RB_USER                         0x00000002L
  503.    
  504.    /* GetBoundsData */
  505.    
  506.    #define GBD_GPI                         0L
  507.    #define GBD_USER                        1L
  508.    
  509.    /* EndArea Cancel Option */
  510.    
  511.    #define EA_DRAW                         0x00000000L
  512.    #define EA_CANCEL                       0x00000001L
  513.    
  514.    /* Bitblt Style */
  515.    
  516.    #define BLTMODE_SRC_BITMAP              0x00010000L
  517.    #define BLTMODE_ATTRS_PRES              0x00020000L
  518.    #define BBO_TARGWORLD                   0x00000100L
  519.    
  520.    typedef struct _BITBLTPARAMETERS   /* bbp */
  521.    {
  522.       RECTL rclTarg;
  523.       RECTL rclSrc;
  524.    } BITBLTPARAMETERS;
  525.    typedef BITBLTPARAMETERS *PBITBLTPARAMETERS;
  526.    
  527.    typedef struct _BITBLTATTRS   /* bba */
  528.    {
  529.       LONG cSize;
  530.       LONG lColor;
  531.       LONG lBackColor;
  532.    } BITBLTATTRS;
  533.    typedef BITBLTATTRS *PBITBLTATTRS;
  534.    
  535.    /* LCIDs */
  536.    
  537.    #define LCID_AVIO_1                     (-2L)
  538.    #define LCID_AVIO_2                     (-3L)
  539.    #define LCID_AVIO_3                     (-4L)
  540.    #define LCID_BITMAP_ID_REQUEST          (-5L)
  541.    
  542.    #define LCID_RANGE_GPI                  1L
  543.    #define LCID_RANGE_AVIO                 2L
  544.    #define LCID_RANGE_BOTH                 3L
  545.    #define LCID_GRAPHICS_MIN               1
  546.    #define LCID_GRAPHICS_MAX               254
  547.    
  548.    #define LCIDT_NONE                      0L
  549.    
  550.    /* ResetDC */
  551.    
  552.    #define RDC_RGBMODE                     0x1L
  553.    #define RDC_SETOWNERTOSHELL             0x2L
  554.    
  555.    /* SetRandomXform */
  556.    
  557.    #define SX_UNITY                        0L
  558.    #define SX_CAT_AFTER                    1L
  559.    #define SX_CAT_BEFORE                   2L
  560.    #define SX_OVERWRITE                    3L
  561.    
  562.    /* transform accelerators                    */
  563.    /*  These bits are only valid if the MATRIX_SIMPLE bit is set.           */
  564.    /*  The X and Y negate flags are only meaningful if MATRIX_UNITS is set.*/
  565.    
  566.    #define MATRIX_SIMPLE            0x0001L  /* two entries are zero */
  567.    #define MATRIX_UNITS             0x0002L  /* all entries are +1 or -1 */
  568.    #define MATRIX_XY_EXCHANGE       0x0004L  /* zeros are on the diagonal*/
  569.    #define MATRIX_X_NEGATE          0x0008L  /* X is hit by negative */
  570.    #define MATRIX_Y_NEGATE          0x0010L  /* Y is hit by negative */
  571.    #define MATRIX_TRANSLATION       0x0020L  /* non-zero translation */
  572.    
  573.    /* NotifyClipChange */
  574.    
  575.    #define NCC_CLEANDC              0x0002L  /* clear DC dirty bit */
  576.    
  577.    /* NotifyTransformChange */
  578.    
  579.    typedef struct _NOTIFYTRANSFORMDATA   /* ntd */
  580.    {
  581.       ULONG  usType;
  582.       XFORM  xform;
  583.    } NOTIFYTRANSFORMDATA;
  584.    typedef NOTIFYTRANSFORMDATA *PNOTIFYTRANSFORMDATA;
  585.    
  586.    /* ColorTable */
  587.    
  588.    #define LCOL_SYSCOLORS           0x0010L
  589.    
  590.    
  591.    /* query device caps */
  592.    
  593.    typedef struct _QCDARRAY   /* qcd */
  594.    {
  595.       LONG    iFormat;
  596.       LONG    iSmallest;
  597.       LONG    iLargest;
  598.       LONG    cAvailable;
  599.       LONG    cSpecifiable;
  600.       LONG    iMax;
  601.    } QCDARRAY;
  602.    typedef QCDARRAY *PQCDARRAY;
  603.    
  604.    #define CAPS_MIX_OR                  0x00000001L
  605.    #define CAPS_MIX_COPY                0x00000002L
  606.    #define CAPS_MIX_UNDERPAINT          0x00000004L
  607.    #define CAPS_MIX_XOR                 0x00000008L
  608.    #define CAPS_MIX_INVISIBLE           0x00000010L
  609.    #define CAPS_MIX_AND                 0x00000020L
  610.    #define CAPS_MIX_OTHER               0x00000040L
  611.    
  612.    #define CAPS_DEV_FONT_SIM_BOLD       1L      /* for CAPS_DEVICE_FONT_SIM */
  613.    #define CAPS_DEV_FONT_SIM_ITALIC     2L
  614.    #define CAPS_DEV_FONT_SIM_UNDERSCORE 4L
  615.    #define CAPS_DEV_FONT_SIM_STRIKEOUT  8L
  616.    
  617.    #define CAPS_BACKMIX_OR              0x00000001L
  618.    #define CAPS_BACKMIX_COPY            0x00000002L
  619.    #define CAPS_BACKMIX_UNDERPAINT      0x00000004L
  620.    #define CAPS_BACKMIX_XOR             0x00000008L
  621.    #define CAPS_BACKMIX_INVISIBLE       0x00000010L
  622.    
  623.    
  624.    /*#define CAPS_RASTER_BITBLT         0x00000001L defined in pmdev.h */
  625.    /*#define CAPS_RASTER_BANDING        0x00000002L */
  626.    /*#define CAPS_RASTER_STRETCHBLT     0x00000004L */
  627.    /*#define CAPS_RASTER_SETPEL         0x00000010L */
  628.    #define CAPS_FONT_OUTLINE_MANAGE     16L
  629.    #define CAPS_FONT_IMAGE_MANAGE       32L
  630.    #define SFONT_RASTER                 100
  631.    #define SFONT_OUTLINE                101
  632.    #define FONT              1000       /* must not conflict with RT_XXX */
  633.    /* constants in BSEDOS.H */
  634.    
  635.    /* DCCaps */
  636.    
  637.    #define DCCAPS_LINE                  0x0100
  638.    #define DCCAPS_CURVE                 0x0200
  639.    #define DCCAPS_AREA                  0x0400
  640.    #define DCCAPS_MARKER                0x0800
  641.    #define DCCAPS_TEXT                  0x1000
  642.    
  643.    /* DeviceDeleteBitmap */
  644.    #define BITMAP_USAGE_TRANSLATE       0x0004
  645.    
  646.    /* DeleteBitmap return structure */
  647.    typedef struct _DELETERETURN   /* dr */
  648.    {
  649.       ULONG      pInfo;
  650.       ULONG      pBits;
  651.    } DELETERETURN;
  652.    typedef DELETERETURN *PDELETERETURN;
  653.    
  654.    /* Short Line Header */
  655.    
  656.    #define SLH_FORMAT_IS_16_DOT_16 1
  657.    #define PSL_YMAJOR 0x8000    /* bit mask for usStyle */
  658.    
  659.    typedef struct _SHORTLINEHEADER   /* slh */
  660.    {
  661.       ULONG  ulStyle;
  662.       ULONG  ulFormat;
  663.       POINTL ptlStart;
  664.       POINTL ptlStop;
  665.       LONG   lxLeft;
  666.       LONG   lxRight;
  667.       struct _SHORTLINEHEADER *pslhNext;
  668.       struct _SHORTLINEHEADER *pslhPrev;
  669.    } SHORTLINEHEADER;
  670.    typedef SHORTLINEHEADER *PSHORTLINEHEADER;
  671.    /* Short Line */
  672.    
  673.    typedef struct _SHORTLINE   /* sl */
  674.    {
  675.       SHORTLINEHEADER slh;
  676.       LONG      ax[1];
  677.    } SHORTLINE;
  678.    typedef SHORTLINE *PSHORTLINE;
  679.    
  680.    /* Bounding rectangle for subpaths. */
  681.    
  682.    typedef struct _BRECTL          /* brctl */
  683.    {
  684.       POINTL ptl1;
  685.       POINTL ptl2;
  686.    } BRECTL;
  687.    typedef BRECTL *PBRECTL;
  688.    
  689.    typedef struct _RLEHDR   /* rle */
  690.    {
  691.       LONG     lType;
  692.       BRECTL   brectlBounds;
  693.       PVOID    pRLE;
  694.    } RLEHDR;
  695.    typedef RLEHDR *PRLEHDR;
  696.    
  697.    
  698.    typedef struct _SCANDATA   /* sd */
  699.    {
  700.       PSHORTLINE pslFirstLeft;
  701.       PSHORTLINE pslLastLeft;
  702.       PSHORTLINE pslFirstRight;
  703.       PSHORTLINE pslLastRight;
  704.       ULONG      c;
  705.       RECTL      rclBound;
  706.    } SCANDATA;
  707.    typedef SCANDATA *PSCANDATA;
  708.    
  709.    /* Index for Set/GetDriverInfo */
  710.    
  711.    #define DI_HDC                      0x00000000L
  712.    #define DI_HBITMAP                  0x00000001L
  713.    
  714. #endif  /* INCL_DDIMISC */
  715.  
  716. #ifdef INCL_DDIMISC2
  717.    
  718.    /* RealizeFont */
  719.    
  720.    #define REALIZE_FONT                 1
  721.    #define REALIZE_ENGINE_FONT          2
  722.    #define DELETE_FONT                  3
  723.    
  724.    #define RF_DEVICE_FONT               1
  725.    #define RF_LOAD_ENGINE_FONT          2
  726.    #define RF_DELETE_FONT               3
  727.    #define RF_DELETE_ENGINE_FONT        4
  728.    
  729. #endif  /* INCL_DDIMISC2 */
  730.  
  731. #ifdef INCL_DDIBUNDLES
  732.    
  733.    /* Device Line Bundle */
  734.    
  735.    typedef struct _LINEDEFS   /* ldef */
  736.    {
  737.       ULONG      defType;
  738.    } LINEDEFS;
  739.    typedef LINEDEFS *PLINDEFS;
  740.    
  741.    typedef struct _DLINEBUNDLE   /* dlbnd */
  742.    {
  743.       LONG       cAttr;
  744.       LONG       cDefs;
  745.       LINEBUNDLE lbnd;
  746.       LINEDEFS   ldef;
  747.    } DLINEBUNDLE;
  748.    typedef DLINEBUNDLE *PDLINEBUNDLE;
  749.    
  750.    /* Device Area Bundle */
  751.    
  752.    typedef struct _AREADEFS   /* adef */
  753.    {
  754.       ULONG      defSet;
  755.       ULONG      fFlags;
  756.       ULONG      CodePage;
  757.    } AREADEFS;
  758.    typedef AREADEFS *PAREADEFS;
  759.    
  760.    typedef struct _DAREABUNDLE   /* dabnd */
  761.    {
  762.       LONG       cAttr;
  763.       LONG       cDefs;
  764.       AREABUNDLE abnd;
  765.       AREADEFS   adef;
  766.    } DAREABUNDLE;
  767.    typedef DAREABUNDLE *PDAREABUNDLE;
  768.    
  769.    /* Device Character Bundle */
  770.    
  771.    typedef struct _CHARDEFS   /* cdef */
  772.    {
  773.       ULONG      defSet;
  774.       ULONG      fFlags;
  775.       ULONG      CodePage;
  776.       ULONG      charSpacing;
  777.    } CHARDEFS;
  778.    typedef CHARDEFS *PCHARDEFS;
  779.    
  780.    typedef struct _DCHARBUNDLE   /* dcbnd */
  781.    {
  782.       LONG       cAttr;
  783.       LONG       cDefs;
  784.       CHARBUNDLE cbnd;
  785.       CHARDEFS   cdef;
  786.    } DCHARBUNDLE;
  787.    typedef DCHARBUNDLE *PDCHARBUNDLE;
  788.    
  789.    /* Device Image Bundle */
  790.    
  791.    #ifdef BOGUS
  792.       typedef struct _IMAGEDEFS   /* idef */
  793.       {
  794.       } IMAGEDEFS;
  795.    #endif       /* BOGUS */
  796.    
  797.    typedef struct _DIMAGEBUNDLE   /* dibnd */
  798.    {
  799.       LONG       cAttr;
  800.       LONG       cDefs;
  801.       IMAGEBUNDLE ibnd;
  802.       /* IMAGEDEFS     idef; */
  803.    } DIMAGEBUNDLE;
  804.    typedef DIMAGEBUNDLE *PDIMAGEBUNDLE;
  805.    
  806.    /* Device Marker Bundle */
  807.    
  808.    typedef struct _MARKERDEFS   /* mdef */
  809.    {
  810.       ULONG      defSet;
  811.       ULONG      fFlags;
  812.       ULONG      CodePage;
  813.    } MARKERDEFS;
  814.    typedef MARKERDEFS *PMARKERDEFS;
  815.    
  816.    typedef struct _DMARKERBUNDLE   /* dmbnd */
  817.    {
  818.       LONG       cAttr;
  819.       LONG       cDefs;
  820.       MARKERBUNDLE mbnd;
  821.       MARKERDEFS   mdef;
  822.    } DMARKERBUNDLE;
  823.    typedef DMARKERBUNDLE *PDMARKERBUNDLE;
  824.    
  825.    
  826. #endif /* INCL_DDIBUNDLES */
  827.  
  828. #ifdef INCL_DDIFONTSTRUCS
  829.    #include <pmfont.h>
  830. #endif /* INCL_DDIFONTSTRUCS */
  831.  
  832. #ifdef INCL_DDIBITMAPFILE
  833.    #include <pmbitmap.h>
  834. #endif /* INCL_DDIBITMAPFILE */
  835.  
  836. #ifdef INCL_DDIPATHS
  837.    /* Curve types */
  838.    
  839.    #define CURVE_IDENTIFIER             0x43
  840.    #define LINE_IDENTIFIER              0x4C
  841.    #define CURVE_DO_FIRST_PEL           0x0002
  842.    
  843.    typedef struct _CURVE   /* cv */
  844.    {
  845.       BYTE        bIdent;             /*  1    1  */
  846.       BYTE        bType;              /*  1    2  */
  847.       USHORT      usReserved;         /*  2    4  */
  848.       ULONG       flStyle;            /*  4    8  */
  849.       ULONG       fl;                 /*  4   12  */
  850.       struct      _CURVE *pcvNext;    /*  4   16  */
  851.       struct      _CURVE *pcvPrev;    /*  4   20  */
  852.       struct      _CURVE *pcvAttrs;   /*  4   24  */
  853.       POINTFX     ptfxA;              /*  8   32  */
  854.       POINTFX     ptfxC;              /*  8   40  */
  855.       BYTE        Reserved2[28];      /* 28   68  */
  856.    } CURVE;
  857.    typedef CURVE *PCURVE;
  858.    
  859.    typedef struct _LINE   /* ln */
  860.    {
  861.       BYTE        bIdent;             /*  1    1  */
  862.       BYTE        bType;              /*  1    2  */
  863.       USHORT      usReserved;         /*  2    4  */
  864.       ULONG       flStyle;            /*  4    8  */
  865.       ULONG       fl;                 /*  4   12  */
  866.       PCURVE      pcvNext;            /*  4   16  */
  867.       PCURVE      pcvPrev;            /*  4   20  */
  868.       PCURVE      pcvAttrs;           /*  4   24  */
  869.       POINTFX     ptfxA;              /*  8   32  */
  870.       POINTFX     ptfxC;              /*  8   40  */
  871.       POINTL      ptlA;               /*  8   48  */
  872.       POINTL      ptlC;               /*  8   56  */
  873.       FIXED       fxRslope;           /*  4   60  */
  874.       BYTE        Reserved1[8];       /*  8   68  */
  875.    } LINE;
  876.    typedef LINE *PLINE;
  877.    
  878. #endif  /* INCL_DDIPATHS */
  879.  
  880. #ifdef INCL_GRE_JOURNALING
  881.    #define JNL_TEMP_FILE            0x00000001L
  882.    #define JNL_PERM_FILE            0x00000002L
  883.    #define JNL_ENGINERAM_FILE       0x00000004L
  884.    #define JNL_USERRAM_FILE         0x00000008L
  885.    #define JNL_DRAW_OPTIMIZATION    0x00000010L
  886.    #define JNL_BOUNDS_OPTIMIZATION  0x00000020L
  887. #endif  /* INCL_GRE_JOURNALING */
  888.  
  889.  
  890. #ifdef INCL_GRE_DEVICE
  891.    
  892.    /* QueryDeviceBitmaps */
  893.    
  894.    typedef struct _BITMAPFORMAT   /* bmf */
  895.    {
  896.       ULONG cPlanes;
  897.       ULONG cBitCount;
  898.    } BITMAPFORMAT;
  899.    typedef BITMAPFORMAT *PBITMAPFORMAT;
  900.    
  901. #endif /* INCL_GRE_DEVICE */
  902.  
  903. #ifdef INCL_GRE_PALETTE
  904.    
  905.    typedef struct _PALETTEINFOHEADER   /* palinfohdr */
  906.    {
  907.       ULONG  flCmd;         /* options from creation                   */
  908.       ULONG  ulFormat;      /* specifies format of entries at creation */
  909.       ULONG  cclr;          /* number of elements supplied at creation */
  910.    } PALETTEINFOHEADER;
  911.    typedef PALETTEINFOHEADER *NPPALETTEINFOHEADER;
  912.    typedef PALETTEINFOHEADER *PPALETTEINFOHEADER;
  913.    
  914.    typedef struct _PALETTEINFO   /* palinfo */
  915.    {
  916.       ULONG  flCmd;         /* options from creation                   */
  917.       ULONG  ulFormat;      /* specifies format of entries at creation */
  918.       ULONG  cclr;          /* number of elements supplied at creation */
  919.       RGB2   argb[1];       /* the palette entries                     */
  920.    } PALETTEINFO;
  921.    typedef PALETTEINFO *NPPALETTEINFO;
  922.    typedef PALETTEINFO *PPALETTEINFO;
  923.    
  924.    /* flType values for RealizePalette */
  925.    #define RP_BACKGROUND                0
  926.    #define RP_FOREGROUND                1
  927.    #define RP_DEFAULTSCHANGED           2
  928.    
  929. #endif
  930.  
  931. #ifdef INCL_GRE_BITMAPS
  932.    #define LR_CLIPPED   2
  933.    #define LR_NOTBORDER 0
  934.    #define LR_BORDER    1
  935.    #define LR_LEFT      2
  936.    #define LR_RIGHT     4
  937. #endif
  938.  
  939. /* Flags  for GreOutlinePath */
  940. #define OPTH_NO_CLIPPING_REQD         0x0001L
  941. #define OPTH_QRY_PATH_POINTS          0x0002L
  942.  
  943. /*** 32-bit cursor/pointer stuff ******************************/
  944. typedef struct _MCDESCRIPTION   /* mcdesc */
  945. {
  946.    PVOID    pMoveCursor;
  947.    ULONG    ulCodeLength;
  948.    PVOID    pCursorData;
  949.    ULONG    ulDataLength;
  950. }  MCDESCRIPTION;
  951. typedef MCDESCRIPTION *PMCDESCRIPTION;
  952.  
  953. typedef struct _WINCURSORDATA   /* winmc */
  954. {
  955.    ULONG      pMoveCursor;
  956.    ULONG      pMoveCursorAlias;
  957.    ULONG      pCursorData;
  958.    ULONG      pCursorDataAlias;
  959.    ULONG      ulRoutineType;
  960.    HMODULE    hModDisplay;
  961.    PVOID      pWCThunkCode;
  962.    ULONG      ulThunkLen;
  963.    USHORT     usR0CS;
  964.    USHORT     usR0DS;
  965. }  WINCURSORDATA;
  966. typedef WINCURSORDATA *PWINCURSORDATA;
  967.  
  968. #define MC_32BIT   32
  969. #define MC_16BIT   16
  970.  
  971. #ifdef INCL_GRE_SCREEN
  972.    
  973.    /* GetScreenBits */
  974.    
  975.    typedef LHANDLE   HSCA;     /* hsca */
  976.    typedef HSCA *PHSCA;
  977.    
  978.    #define GSB_OPT_4BPP    0x0000L
  979.    #define GSB_OPT_8BPP    0x0001L
  980.    #define GSB_OPT_16BPP   0x0002L
  981.    #define GSB_OPT_LINEAR  0x0000L
  982.    #define GSB_OPT_PLANAR  0x0008L
  983.    #define GSB_OPT_HRGN    0x0010L
  984.    
  985. #endif /* INCL_GRE_SCREEN */
  986.  
  987. #ifdef INCL_VMANDDI
  988.    
  989.    #define CAPS_MAX_CAPS    41
  990.    #define DEFAULT_PATTERNS_NUMBER 20
  991.    
  992.    //*******************************************************************************
  993.    // Halftoning and Dithering support for OS/2
  994.    //*******************************************************************************
  995.    
  996.    /******************************************************************************/
  997.    /*    PPOINTL     pptlSrc;            // src left, bottom, width and height.  */
  998.    /*    PPOINTL     pptlDst;            // dst left, bottom, width and height.  */
  999.    /*    ULONG       ulSrcBytesPerLine;  // src bytes per line                   */
  1000.    /*    PBYTE       pbSrcBits;          // pointer to src image data            */
  1001.    /*    ULONG       ulTrgBytesPerLine;  // dst bytes per line                   */
  1002.    /*    PBYTE       pbTrgBits;          // pointer to dst image data            */
  1003.    /*    ULONG       ulOptions;          // options                              */
  1004.    /*    ULONG       ulcClrs;            // count of colors in rgb2 table        */
  1005.    /*    PRGB2       pargb2;             // rgb2 table                           */
  1006.    /******************************************************************************/
  1007.    
  1008.    typedef struct _IMAGEINFOS          /* imginfo */
  1009.    {
  1010.       PPOINTL     pptlSrc;
  1011.       PPOINTL     pptlDst;
  1012.       ULONG       ulSrcBpp;
  1013.       ULONG       ulSrcBytesPerLine;
  1014.       PBYTE       pbSrcBits;
  1015.       ULONG       ulcSrcClrs;
  1016.       ULONG       ulSrcClrType;
  1017.       PRGB2       pargb2Src;
  1018.       ULONG       ulTrgBpp;
  1019.       ULONG       ulTrgBytesPerLine;
  1020.       PBYTE       pbTrgBits;
  1021.       ULONG       ulcTrgClrs;
  1022.       ULONG       ulTrgClrType;
  1023.       PRGB2       pargb2Trg;
  1024.       ULONG       ulOptions;
  1025.    } IMAGEINFOS;
  1026.    typedef IMAGEINFOS * PIMAGEINFO;    /* pimginfo */
  1027.    
  1028.    //
  1029.    // ulSrcClrType, ulTrgClrType
  1030.    // color RGB types.
  1031.    //
  1032.    #define COLOR_RGB2            0x0000  // color is in RGB2              (default)
  1033.    #define COLOR_RGB             0x0001  // color is in RGB
  1034.    
  1035.    #define COLOR_24BIT_BGR       0x0000  // 1st byte=blue, 2nd byte=green (default)
  1036.    // 3rd byte=red
  1037.    #define COLOR_24BIT_RGB       0x0001  // 1st byte=red,  2nd byte=green
  1038.    // 3rd byte=blue
  1039.    
  1040.    #define COLOR_16BIT_565_BGR   0x0000  // blue - 5 bits,                (default)
  1041.    // green - 6 bits, red - 5 bits
  1042.    // ---------------------------------
  1043.    // |b|b|b|b|b|g|g|g|g|g|g|r|r|r|r|r|
  1044.    // ---------------------------------
  1045.    #define COLOR_16BIT_565_RGB   0x0001  // red - 5 bits,
  1046.    // green - 6 bits, blue - 5 bits
  1047.    // ---------------------------------
  1048.    // |r|r|r|r|r|g|g|g|g|g|g|b|b|b|b|b|
  1049.    // ---------------------------------
  1050.    #define COLOR_16BIT_1555_BGR  0x0002  // overlay - 1, red - 5 bits,
  1051.    // green - 5 bits, blue - 5 bits
  1052.    // ---------------------------------
  1053.    // |o|b|b|b|b|b|g|g|g|g|g|r|r|r|r|r|
  1054.    // ---------------------------------
  1055.    #define COLOR_16BIT_1555_RGB  0x0004  // overlay - 1, red - 5 bits,
  1056.    // green - 5 bits, blue - 5 bits
  1057.    // ---------------------------------
  1058.    // |o|r|r|r|r|r|g|g|g|g|g|b|b|b|b|b|
  1059.    // ---------------------------------
  1060.    #define COLOR_32BIT_BGR       0x0000  // 1st byte=blue, 2nd byte=green (default)
  1061.    // 3rd byte=red,  4th byte=not used.
  1062.    #define COLOR_32BIT_RGB       0x0001  // 1st byte=red,  2nd byte=green
  1063.    // 3rd byte=blue, 4th byte=not used.
  1064.    
  1065.    //
  1066.    // ulOptions
  1067.    //
  1068.    //   Exact color match.
  1069.    //     source pels that are the target BG color become target BG color.
  1070.    //     All other pels become target FG color.
  1071.    #define IMAGEINFO_CLR_TO_MONO_BG_EXACT     0x00000001 // src pels that are trg BG clr -> 1
  1072.    // all other pels               -> 0
  1073.    #define IMAGEINFO_CLR_TO_MONO_BG_EXACT_INV 0x00000002 // src pels that are trg BG clr -> 0
  1074.    // all other pels               -> 1
  1075.    //   Nearest color match.
  1076.    //     source pels that are close to target BG color become target BG color.
  1077.    //     All other pels become target FG color.
  1078.    #define IMAGEINFO_CLR_TO_MONO_BG_MAP       0x00000004 // src pels that are close to trg BG clr -> 1
  1079.    // all other pels                        -> 0
  1080.    #define IMAGEINFO_CLR_TO_MONO_BG_MAP_INV   0x00000008 // src pels that are close to trg BG clr -> 0
  1081.    // all other pels                        -> 1
  1082.    #define IMAGEINFO_SRC_Y_FLIP               0x00000010 // source is going Y negative direction
  1083.    // i.e. second line = first line - ulBytesPerLine.
  1084.    #define IMAGEINFO_TRG_Y_FLIP               0x00000020 // target is going Y negative direction
  1085.    
  1086.    /*******************************************************************************************/
  1087.    /*    ULONG       ulLength;      // Length of dither matrix structure                      */
  1088.    /*    ULONG       fExt2IntSup;   // Gre Dither Flags for Ext to Int                        */
  1089.    /*    PVOID       pExt2IntDI;    // Used for GDM_USERDEF - pointer to users dither info    */
  1090.    /*    ULONG       fStretchSup;   // Gre Dither Flags for Stretch Support                   */
  1091.    /*    PVOID       pStretchDI;    // Used for GDM_USERDEF - pointer to users dither info    */
  1092.    /*    ULONG       fLog2PhysSup;  // Gre Dither Flags for Log to Phys clr mapping           */
  1093.    /*    PVOID       pLog2PhysDI;   // Used for GDM_USERDEF - pointer to users dither info    */
  1094.    /*    PFN         pfnDither;     // Used for GDM_USERDEF - pointer to users dither function*/
  1095.    /*******************************************************************************************/
  1096.    
  1097.    typedef struct _DITHERMATRIX   /* dthmtx */
  1098.    {
  1099.       ULONG       ulLength;
  1100.       ULONG       fExt2IntSup;
  1101.       PVOID       pExt2IntDI;
  1102.       ULONG       fStretchSup;
  1103.       PVOID       pStretchDI;
  1104.       ULONG       fLog2PhysSup;
  1105.       PVOID       pLog2PhysDI;
  1106.       PFN         pfnDither;
  1107.    } DITHERMATRIX;
  1108.    typedef DITHERMATRIX *PDITHERMATRIX;  /* pdthmtx */
  1109.    
  1110.    //
  1111.    // fExt2IntSup/fLog2IntSup
  1112.    //
  1113.    #define  GDM_NO_DITHER               0x0000   // No dithering in system
  1114.    #define  GDM_USERDEF_DITHER          0x0001   // Users supplies own Dithering routines
  1115.    #define  GDM_MATRIX_DITHER           0x0002   // Use System ordered dithering
  1116.    #define  GDM_ERRORDIF_DITHER         0x0004   // Use System error diffusion dithering
  1117.    #define  GDM_DITHER_BEGIN            0x0008   // Use System Floyd-Steinberg dithering
  1118.    #define  GDM_DITHER_END              0x0010   // Use System error propigation dithering
  1119.    #define  GDM_COLOR_CONVERT           0x0020   // Use device's clr mapping functions
  1120.    
  1121.    typedef struct _COLORCONVERTINFO             /* cci  */
  1122.    {
  1123.       ULONG              ulLength;
  1124.       ULONG              ulType;
  1125.       ULONG              ulOptions;
  1126.       ULONG (* APIENTRY pfnRGB2ToPhyIndex) () ;
  1127.       ULONG (* APIENTRY pfnPhyIndexToRGB2) () ;
  1128.       ULONG (* APIENTRY pfnConvert)        () ;
  1129.    } COLORCONVERTINFO;
  1130.    typedef COLORCONVERTINFO *PCOLORCONVERTINFO; /* pcci */
  1131.    
  1132.    ULONG (* APIENTRY pfnRGB2ToPhyIndex) (ULONG ulClr) ;
  1133.    ULONG (* APIENTRY pfnPhyIndexToRGB2) (ULONG ulClr) ;
  1134.    ULONG (* APIENTRY pfnConvert)        (PIMAGEINFO pimginfo);
  1135.    
  1136.    // pfnDither(PDITHERINFO pdi, PIMAGEINFO pii, ULONG ulFlags);
  1137.    
  1138.    #define  GDM_EXT2INT_DITHER   0x01
  1139.    #define  GDM_STRETCH_DITHER   0x02
  1140.    #define  GDM_LOG2PHY_DITHER   0x04
  1141.    
  1142.    /*******************************************************************************************/
  1143.    /*    ULONG       ulLength;      // length of structure                 - 88               */
  1144.    /*    ULONG       ulType;        // type of dither info structure       - GDM_MATRIX_DITHER*/
  1145.    /*    ULONG       fOptions;      // dither info options - DI_MONOINVERT - 00               */
  1146.    /*    ULONG       ulIntensity;   // RGB Gama Correction Value           - 00               */
  1147.    /*    BYTE        bRedWt;        // weight of primary color red         - 25               */
  1148.    /*    BYTE        bGreenWt;      // weight of primary color green       - 60               */
  1149.    /*    BYTE        bBlueWt;       // weight of primary color blue        - 15               */
  1150.    /*    BYTE        bPad;          // 4 byte align                        - 00               */
  1151.    /*    SIZEL       szMatrix;      // halftone pattern size               - 8                */
  1152.    /*    BYTE        bHalftone[];   // array of halftone patterns          - see 32gdata.c    */
  1153.    /*******************************************************************************************/
  1154.    
  1155.    typedef struct _MATRIXDITHERINFO      /* mtrxdi */
  1156.    {
  1157.       ULONG       ulLength;
  1158.       ULONG       ulType;
  1159.       ULONG       fOptions;
  1160.       ULONG       ulIntensity;
  1161.       BYTE        bRedWt;
  1162.       BYTE        bGreenWt;
  1163.       BYTE        bBlueWt;
  1164.       BYTE        bPad;
  1165.       SIZEL       szMatrix;
  1166.       BYTE        bHalftone[1];
  1167.    } MATRIXDITHERINFO;
  1168.    typedef MATRIXDITHERINFO *PMDI;  /* pmtrxdi */
  1169.    
  1170.    #define STUCKI_DIF 0x01
  1171.    #define JJN_DIF    0x02
  1172.    #define RND_DIF    0x04
  1173.    #define USER_DIF   0x08
  1174.    
  1175.    typedef struct _DIFFUSIONDITHERINFO      /* difdi */
  1176.    {
  1177.       ULONG       ulLength;
  1178.       ULONG       ulType;        // Stucki, J,J & N, RANDOM, User defined
  1179.       ULONG       fOptions;
  1180.       ULONG       ulIntensity;
  1181.       BYTE        bRedWt;
  1182.       BYTE        bGreenWt;
  1183.       BYTE        bBlueWt;
  1184.       BYTE        bPad;
  1185.       PBYTE       pBuffer;
  1186.       SIZEL       szFilter;
  1187.       BYTE        bFilterArry[1];
  1188.       
  1189.    } DIFFUSIONDITHERINFO;
  1190.    typedef DIFFUSIONDITHERINFO *PDDI;  /* pdifdi */
  1191.    
  1192.    typedef struct _DEVICESURFACE          /* devsur */
  1193.    {
  1194.       ULONG         ulLength;
  1195.       BMAPINFO      SurfaceBmapInfo;
  1196.       ULONG         ulDSFlgs;
  1197.       ULONG         ulStyleRatio;
  1198.       BMAPINFO      abmapinfoDefPattern[DEFAULT_PATTERNS_NUMBER];
  1199.       PVOID         pHWPalette;
  1200.       DITHERMATRIX  DitherMatrix;
  1201.       PFN           pfnDevLockDC;
  1202.       PFN           pfnDevUnLockDC;
  1203.       PFN           pfnBitBlt;
  1204.       PFN           pfnLine;
  1205.       #ifdef DEV_FNT_SUP
  1206.          PFN           pfnTextBlt;
  1207.       #else
  1208.          PFN           pfnReserved;
  1209.       #endif
  1210.       PFN           pfnLockPhysDev;
  1211.       PFN           pfnUnLockPhysDev;
  1212.       ULONG         hddc;
  1213.       ULONG         ulReserved[4];
  1214.       ULONG         ulCapsCnt;
  1215.       ULONG         DevCaps[CAPS_MAX_CAPS + 1];
  1216.    } DEVICESURFACE;
  1217.    typedef DEVICESURFACE *PDEVICESURFACE; /* pdevsur */
  1218.    
  1219.    APIRET APIENTRY GreSetDitherInfo(HDC hdc,
  1220.                                     ULONG ulDitherType,
  1221.                                     PVOID pDitherInfo);
  1222.    APIRET APIENTRY SetDeviceSurface(HDC hdc,
  1223.                                     PDEVICESURFACE pds);
  1224.    
  1225.    // Surface definition flags
  1226.    //
  1227.    #define DS_MEMORY                      0x00000001  // memory DS for a memory DC.
  1228.    #define DS_ROTATION                    0x00000002  // 90 degree rotation.
  1229.    
  1230.    #define DS_HORIZONTAL_SCAN             0x00000004  // horizontal scan DS.
  1231.    #define DS_VERTICAL_SCAN               0x00000008  // vertical scan DS.
  1232.    // DS must be TOPBOTTOM.
  1233.    #define DS_BYTEALIGN                   0x00000010  // DS scan line alignment.
  1234.    #define DS_WORDALIGN                   0x00000020  // DS scan line alignment
  1235.    #define DS_DWORDALIGN                  0x00000040  // DS scan line alignment
  1236.    
  1237.    #define DS_KEEP_EXTFORMAT              0x00000100  // bitmaps are created
  1238.    // in the external format.
  1239.    #define DS_MONO_INVERT                 0x00000200  // mono ROPs are inverted.
  1240.    #define DS_EXTERNAL_BITMAP_SELECTED    0x00000400  // Reserved.
  1241.    #define DS_NOTIFY_LAST_SDBITBLT        0x00000800  //
  1242.    #define DS_QUEUED_RAW_DEFAULT          0x00001000  //
  1243.    
  1244.    #define DS_DOWNLOAD_FONTS              0x00002000  // Device Supports Downloaded Fonts
  1245.    #define DS_FONT_CLIP_SUPPORT           0x00004000  // Device will clip fonts
  1246.    #define DS_DEVICE_FONTS                0x00008000  // Device has Hardware Fonts
  1247.    
  1248.    #define DS_BOTTOMTOP                   0x00010000  // bottom to top is Y positive.
  1249.    #define DS_TOPBOTTOM                   0x00020000  // top to bottom is Y positive.
  1250.    
  1251.    // textblt clipping option
  1252.    #define DS_CLIP_100_RULE               0x00000000  // draw character if 100% is in clip rect
  1253.    #define DS_CLIP_66_RULE                0x00040000  // draw character if 2/3 is in clip rect
  1254.    #define DS_CLIP_PRECISE_RULE           0x00080000  // precise clipping
  1255.    
  1256.    // rows along Y and scans along X are default.
  1257.    // row positive and scan positive are default.
  1258.    #define DS_BITBLT_XROW_YSCAN           0x00100000  // rows along X and scans are along Y.
  1259.    #define DS_BITBLT_ROW_NEGATIVE         0x00200000  // next row = this row - bytes per row.
  1260.    #define DS_BITBLT_SCAN_NEGATIVE        0x00400000  // next pel = this pel - bytes per pel.
  1261.    
  1262.    #define DS_SIMPLE_LINES                0x00800000  // device handles LINEINFO2.
  1263.    
  1264.    #define DS_BITBLT_RESERVED             0x04000000  // reserved.
  1265.    
  1266.    #define DS_COLOR_RGB2                  0x00000000  // color is in RGB2             (default)
  1267.    #define DS_COLOR_RGB                   0x10000000  // color is in RGB
  1268.    
  1269.    #define DS_COLOR_24BIT_BGR             0x00000000  // 1st byte=blue,               (default)
  1270.    // 2nd byte=green 3rd byte=red
  1271.    #define DS_COLOR_24BIT_RGB             0x10000000  // 1st byte=red, 2nd byte=green
  1272.    // 3rd byte=blue
  1273.    
  1274.    #define DS_COLOR_16BIT_565_BGR         0x00000000  // blue - 5 bits,               (default)
  1275.    // green - 6 bits, red - 5 bits
  1276.    // ---------------------------------
  1277.    // |b|b|b|b|b|g|g|g|g|g|g|r|r|r|r|r|
  1278.    // ---------------------------------
  1279.    #define DS_COLOR_16BIT_565_RGB         0x10000000  // red - 5 bits,
  1280.    // green - 6 bits, blue - 5 bits
  1281.    // ---------------------------------
  1282.    // |r|r|r|r|r|g|g|g|g|g|g|b|b|b|b|b|
  1283.    // ---------------------------------
  1284.    #define DS_COLOR_16BIT_1555_BGR        0x20000000  // overlay - 1, red - 5 bits,
  1285.    // green - 5 bits, blue - 5 bits
  1286.    // ---------------------------------
  1287.    // |o|b|b|b|b|b|g|g|g|g|g|r|r|r|r|r|
  1288.    // ---------------------------------
  1289.    #define DS_COLOR_16BIT_1555_RGB        0x40000000  // overlay - 1, red - 5 bits,
  1290.    // green - 5 bits, blue - 5 bits
  1291.    // ---------------------------------
  1292.    // |o|r|r|r|r|r|g|g|g|g|g|b|b|b|b|b|
  1293.    // ---------------------------------
  1294.    
  1295.    #define DS_COLOR_32BIT_BGR             0x00000000  // 1st byte=blue, 2nd byte=green  (default)
  1296.    // 3rd byte=red,  4th byte = not used.
  1297.    #define DS_COLOR_32BIT_RGB             0x10000000  // 1st byte=red,  2nd byte=green
  1298.    // 3rd byte=blue  4th byte = not used.
  1299.    
  1300.    #ifndef FONTDEFFONT1
  1301.       #include <pmfont.h>
  1302.    #endif
  1303.    
  1304.    #ifndef DDI_INCLUDED
  1305.       #include <ddi.h>
  1306.    #endif
  1307.    
  1308.    //----------------------------------------------------------------------
  1309.    // DevFontMetrics
  1310.    //
  1311.    //    Structure used to inform GRE about device fonts
  1312.    //----------------------------------------------------------------------
  1313.    
  1314.    typedef struct _DEVFONTMETRICS                        /* dfm */
  1315.    {
  1316.       ULONG                  flOptions;
  1317.       PFOCAFONT              pFoca;
  1318.       PVOID                  pUniPanose;
  1319.       char                   achFileName[260];
  1320.       PSZ                    pszFullFamilyName;
  1321.       PSZ                    pszFullFaceName;
  1322.       char                   achGlyphListName[16];
  1323.       PFN                    pfnDevQueryCodePage;
  1324.       LONG                   lDevMatch;
  1325.    } DEVFONTMETRICS;
  1326.    typedef DEVFONTMETRICS *PDEVFONTMETRICS;
  1327.    
  1328.    // options for flOptions of DEVFONTMETRICS
  1329.    
  1330.    #define DEVFONT_DEFAULT   0x00010000  /* default device font */
  1331.    #define DEVFONT_EXTENSION 0x00020000  /* extended structure definition */
  1332.    
  1333.    //------------------------------------------------------------------STJ-
  1334.    // DevFontMetrics2
  1335.    //
  1336.    //    Structure used to inform GRE about device fonts, with extension
  1337.    //----------------------------------------------------------------------
  1338.    
  1339.    typedef struct _DEVFONTMETRICS2                       /* dfm2 */
  1340.    {
  1341.       ULONG                  flOptions;
  1342.       PFOCAFONT              pFoca;
  1343.       PVOID                  pUniPanose;
  1344.       char                   achFileName[260];
  1345.       PSZ                    pszFullFamilyName;
  1346.       PSZ                    pszFullFaceName;
  1347.       char                   achGlyphListName[16];
  1348.       PFN                    pfnDevQueryCodePage;
  1349.       LONG                   lDevMatch;
  1350.       
  1351.       // Additional fields if DEVFONT_EXTENSION is set
  1352.       
  1353.       ULONG                  ulSize;
  1354.       PSZ                    pszBackupFont;
  1355.       ULONG                  aulDeviceSpecific[4];
  1356.    } DEVFONTMETRICS2;
  1357.    typedef DEVFONTMETRICS2 *PDEVFONTMETRICS2;
  1358.    
  1359.    //------------------------------------------------------------------STJ-
  1360.    
  1361.    // Correction of field name spelling
  1362.    /* XLATOFF */
  1363.    #define pUniPanhose pUniPanose
  1364.    /* XLATON */
  1365.    
  1366.    typedef struct _FONTINFO       /* fntinfo */
  1367.    {
  1368.       DEVFONTINFO            dfi;
  1369.       FOCAFONT               foca;
  1370.    } FONTINFO;
  1371.    typedef FONTINFO *PFONTINFO;
  1372.    
  1373.    typedef struct _PHYSBND        /* physbnd */
  1374.    {
  1375.       ULONG  ulColor;            /* foreground color physical index         */
  1376.       ULONG  ulBackColor;        /* background color physical index         */
  1377.       ULONG  ulrgb2LogColor;     /* foreground logical color rgb, see below */
  1378.       ULONG  ulrgb2LogBackColor; /* background logical color rgb, see below */
  1379.       ULONG  ulMix;              /* forground ROP                           */
  1380.       ULONG  ulBackMix;          /* background ROP                          */
  1381.    } PHYSBND;
  1382.    typedef PHYSBND *PPHYSBND;
  1383.    
  1384.    #define COLOR_LOG_TO_PHY_MAPPED  0x80
  1385.    
  1386.    typedef struct _STATEINFO2         /* stateinfo2 */
  1387.    {
  1388.       POINTL   ptlOrigin;             /* long version of DC origin                       */
  1389.       
  1390.       XFORM    xformWD;               /* WORLD to DEVICE xform                           */
  1391.       ULONG    xform_flags;           /* the flags from NotifyXformChange                */
  1392.       
  1393.       /* Settable defaults information. */
  1394.       
  1395.       PVOID    pDAttr;                /* defaults if they've changed                     */
  1396.       
  1397.       ULONG    ulCodePage;            /* current code page.                              */
  1398.       
  1399.       POINTL   ptlCurPosWorld;        /* current postion in world coordinates.           */
  1400.       POINTL   ptlCurPosScreen;       /* current postion in screen coordinates.          */
  1401.       ULONG    ulLineStyle;           /* line style                                      */
  1402.       /* ┌─────────────────────────────────────────────┐ */
  1403.       /* │    high word   │  5 bits  │ 3 bits │ 8 bits │ */
  1404.       /* └─────────────────────────────────────────────┘ */
  1405.       /* │ first/last pel │ not used │ mask   │ error  │ */
  1406.       
  1407.    } STATEINFO2;
  1408.    typedef STATEINFO2 *PSTATEINFO2;   /* pstateinfo2 */
  1409.    
  1410.    typedef struct _STATEINFO1    /*stateinfo1 */
  1411.    {
  1412.       
  1413.       LONG     hddc;
  1414.       PSTATEINFO2     pStateInfo2;
  1415.       
  1416.       /* RDC without the DMATRIX's   */
  1417.       /* *** Arcs Component Data *** */
  1418.       
  1419.       ARCPARAMS     arc_parameters;
  1420.       LONG          norm;
  1421.       LONG          direction;
  1422.       
  1423.       /* Attribute Bundles */
  1424.       
  1425.       DLINEBUNDLE   line_bundle;
  1426.       DAREABUNDLE   pat_bundle;
  1427.       DCHARBUNDLE   char_bundle;
  1428.       DIMAGEBUNDLE  image_bundle;
  1429.       DMARKERBUNDLE marker_bundle;
  1430.       
  1431.       LONG          line_default;     /* line defaults mask                     */
  1432.       LONG          char_default;     /* char defaults mask                     */
  1433.       LONG          marker_default;   /* marker defaults mask                   */
  1434.       LONG          pat_default;      /* pat  defaults mask                     */
  1435.       LONG          image_default;    /* image defaults mask                    */
  1436.       
  1437.       ULONG         ulOldDriver;      /* Flags for old drivers, see 32const.h   */
  1438.       /* End RDC                                */
  1439.       
  1440.       ULONG    flPattern ;            /* flag                                   */
  1441.       /* PATTERN_SOLID                          */
  1442.       /* PATTERN_DEFAULT_SOLID                  */
  1443.       /* PATTERN_BITS_ALLOCATED                 */
  1444.       /* PATTERN_REF_POINT_SCREEN_DIRTY         */
  1445.       
  1446.       BMAPINFO bmapinfoPattern;       /* currently selected pattern bitmap info.*/
  1447.       POINTL   ptlPatRefPointWorld;   /* pattern origin in world coordinates.   */
  1448.       POINTL   ptlPatRefPointScreen;  /* pattern origin in screen coordinates.  */
  1449.       
  1450.       ULONG    ulLineType;            /* line type.                             */
  1451.       
  1452.       PHYSBND  physChar;
  1453.       PHYSBND  physLine;
  1454.       PHYSBND  physMarker;
  1455.       PHYSBND  physImage;
  1456.       PHYSBND  physArea;
  1457.       
  1458.    } STATEINFO1;
  1459.    typedef STATEINFO1 *PSTATEINFO1;   /* pstateinfo1 */
  1460.    
  1461. #endif /* INCL_VMANDDI */
  1462.  
  1463. #include <pmddim.h>
  1464.  
  1465. /* NOINC */
  1466. #ifdef __cplusplus
  1467.         }
  1468. #endif
  1469. #if __IBMC__ || __IBMCPP__
  1470.    #pragma info( none )
  1471.    #ifndef __CHKHDR__
  1472.       #pragma info( restore )
  1473.    #endif
  1474.    #pragma info( restore )
  1475. #endif
  1476. /* INC */
  1477.  
  1478. /**************************** end of file **********************************/
  1479.