303 lines
10 KiB
C
303 lines
10 KiB
C
/*
|
|
* Win16 printer driver definitions
|
|
*
|
|
* Copyright (C) the Wine project
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef __WINE_WIN16DRV_H
|
|
#define __WINE_WIN16DRV_H
|
|
|
|
#include "windef.h"
|
|
#include "wingdi.h"
|
|
#include "gdi.h"
|
|
|
|
#define SETHIGHBIT
|
|
#undef SETHIGHBIT
|
|
#ifdef SETHIGHBIT
|
|
#define GETGDIINFO 0x8001
|
|
#define INITPDEVICE 0x8000
|
|
#else
|
|
#define GETGDIINFO 0x0001
|
|
#define INITPDEVICE 0x0000
|
|
#endif
|
|
|
|
#define OS_ARC 3
|
|
#define OS_SCANLINES 4
|
|
#define OS_RECTANGLE 6
|
|
#define OS_ELLIPSE 7
|
|
#define OS_MARKER 8
|
|
#define OS_POLYLINE 18
|
|
#define OS_ALTPOLYGON 22
|
|
#define OS_WINDPOLYGON 20
|
|
#define OS_PIE 23
|
|
#define OS_POLYMARKER 24
|
|
#define OS_CHORD 39
|
|
#define OS_CIRCLE 55
|
|
#define OS_ROUNDRECT 72
|
|
|
|
/* Internal Data */
|
|
#define ORD_BITBLT 1
|
|
#define ORD_COLORINFO 2
|
|
#define ORD_CONTROL 3
|
|
#define ORD_DISABLE 4
|
|
#define ORD_ENABLE 5
|
|
#define ORD_ENUMDFONTS 6
|
|
#define ORD_ENUMOBJ 7
|
|
#define ORD_OUTPUT 8
|
|
#define ORD_PIXEL 9
|
|
#define ORD_REALIZEOBJECT 10
|
|
#define ORD_STRBLT 11
|
|
#define ORD_SCANLR 12
|
|
#define ORD_DEVICEMODE 13
|
|
#define ORD_EXTTEXTOUT 14
|
|
#define ORD_GETCHARWIDTH 15
|
|
#define ORD_DEVICEBITMAP 16
|
|
#define ORD_FASTBORDER 17
|
|
#define ORD_SETATTRIBUTE 18
|
|
|
|
#define ORD_STRETCHBLT 27
|
|
#define ORD_STRETCHDIBITS 28
|
|
#define ORD_SELECTBITMAP 29
|
|
#define ORD_BITMAPBITS 30
|
|
|
|
#define ORD_EXTDEVICEMODE 90
|
|
#define ORD_DEVICECAPABILITIES 91
|
|
#define ORD_ADVANCEDSETUPDIALOG 93
|
|
|
|
#define ORD_DIALOGFN 100
|
|
#define ORD_PSEUDOEDIT 101
|
|
|
|
enum {
|
|
FUNC_BITBLT = 0,
|
|
FUNC_COLORINFO,
|
|
FUNC_CONTROL,
|
|
FUNC_DISABLE,
|
|
FUNC_ENABLE,
|
|
FUNC_ENUMDFONTS,
|
|
FUNC_ENUMOBJ,
|
|
FUNC_OUTPUT,
|
|
FUNC_PIXEL,
|
|
FUNC_REALIZEOBJECT,
|
|
FUNC_STRBLT,
|
|
FUNC_SCANLR,
|
|
FUNC_DEVICEMODE,
|
|
FUNC_EXTTEXTOUT,
|
|
FUNC_GETCHARWIDTH,
|
|
FUNC_DEVICEBITMAP,
|
|
FUNC_FASTBORDER,
|
|
FUNC_SETATTRIBUTE,
|
|
FUNC_STRETCHBLT,
|
|
FUNC_STRETCHDIBITS,
|
|
FUNC_SELECTBITMAP,
|
|
FUNC_BITMAPBITS,
|
|
FUNC_EXTDEVICEMODE,
|
|
FUNC_DEVICECAPABILITIES,
|
|
FUNC_ADVANCEDSETUPDIALOG,
|
|
FUNC_DIALOGFN,
|
|
FUNC_PSEUDOEDIT,
|
|
TOTAL_PRINTER_DRIVER_FUNCTIONS /* insert functions before here */
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
LPSTR szDriver; /* Driver name eg EPSON */
|
|
HINSTANCE16 hInst; /* Handle for driver */
|
|
WORD ds_reg; /* DS of driver */
|
|
FARPROC16 fn[TOTAL_PRINTER_DRIVER_FUNCTIONS]; /* Printer functions */
|
|
int nUsageCount; /* Usage count, unload == 0 */
|
|
int nIndex; /* Index in global driver array */
|
|
} LOADED_PRINTER_DRIVER;
|
|
|
|
typedef struct PDEVICE_HEADER
|
|
{
|
|
LOADED_PRINTER_DRIVER *pLPD; /* Associated printer driver */
|
|
} PDEVICE_HEADER;
|
|
|
|
#include "pshpack1.h"
|
|
#define PCOLOR DWORD
|
|
typedef struct DRAWMODE
|
|
{
|
|
SHORT Rop2;
|
|
SHORT bkMode;
|
|
PCOLOR bkColor;
|
|
PCOLOR TextColor;
|
|
SHORT TBreakExtra;
|
|
SHORT BreakExtra;
|
|
SHORT BreakErr;
|
|
SHORT BreakRem;
|
|
SHORT BreakCount;
|
|
SHORT CharExtra;
|
|
COLORREF LbkColor;
|
|
COLORREF LTextColor;
|
|
DWORD ICMCXform;
|
|
SHORT StretchBltMode;
|
|
DWORD eMiterLimit;
|
|
} DRAWMODE, *LPDRAWMODE;
|
|
|
|
|
|
#include "poppack.h"
|
|
|
|
typedef struct WINE_ENUM_PRINTER_FONT_CALLBACK
|
|
{
|
|
DEVICEFONTENUMPROC proc;
|
|
LPARAM lp;
|
|
} WEPFC;
|
|
|
|
#define DRVOBJ_PEN 1
|
|
#define DRVOBJ_BRUSH 2
|
|
#define DRVOBJ_FONT 3
|
|
#define DRVOBJ_PBITMAP 5
|
|
|
|
typedef struct tagDeviceCaps
|
|
{
|
|
WORD version; /* 0: driver version */
|
|
WORD technology; /* 2: device technology */
|
|
WORD horzSize; /* 4: width of display in mm */
|
|
WORD vertSize; /* 6: height of display in mm */
|
|
WORD horzRes; /* 8: width of display in pixels */
|
|
WORD vertRes; /* 10: width of display in pixels */
|
|
WORD bitsPixel; /* 12: bits per pixel */
|
|
WORD planes; /* 14: color planes */
|
|
WORD numBrushes; /* 16: device-specific brushes */
|
|
WORD numPens; /* 18: device-specific pens */
|
|
WORD numMarkers; /* 20: device-specific markers */
|
|
WORD numFonts; /* 22: device-specific fonts */
|
|
WORD numColors; /* 24: size of color table */
|
|
WORD pdeviceSize; /* 26: size of PDEVICE structure */
|
|
WORD curveCaps; /* 28: curve capabilities */
|
|
WORD lineCaps; /* 30: line capabilities */
|
|
WORD polygonalCaps; /* 32: polygon capabilities */
|
|
WORD textCaps; /* 34: text capabilities */
|
|
WORD clipCaps; /* 36: clipping capabilities */
|
|
WORD rasterCaps; /* 38: raster capabilities */
|
|
WORD aspectX; /* 40: relative width of device pixel */
|
|
WORD aspectY; /* 42: relative height of device pixel */
|
|
WORD aspectXY; /* 44: relative diagonal width of device pixel */
|
|
WORD pad1[21]; /* 46-86: reserved */
|
|
WORD logPixelsX; /* 88: pixels / logical X inch */
|
|
WORD logPixelsY; /* 90: pixels / logical Y inch */
|
|
WORD pad2[6]; /* 92-102: reserved */
|
|
WORD sizePalette; /* 104: entries in system palette */
|
|
WORD numReserved; /* 106: reserved entries */
|
|
WORD colorRes; /* 108: color resolution */
|
|
} DeviceCaps;
|
|
|
|
/* Win16 printer driver physical DC */
|
|
typedef struct
|
|
{
|
|
SEGPTR segptrPDEVICE; /* PDEVICE used by 16 bit printer drivers */
|
|
LOGFONT16 lf; /* Current font details */
|
|
TEXTMETRICW tm; /* Current font metrics */
|
|
LPFONTINFO16 FontInfo; /* Current font realized by printer driver */
|
|
LPLOGBRUSH16 BrushInfo; /* Current brush realized by printer driver */
|
|
LPLOGPEN16 PenInfo; /* Current pen realized by printer driver */
|
|
HDC hdc;
|
|
DC *dc;
|
|
DeviceCaps DevCaps; /* Device caps */
|
|
} WIN16DRV_PDEVICE;
|
|
|
|
/*
|
|
* Printer driver functions
|
|
*/
|
|
typedef SEGPTR LPPDEVICE;
|
|
LOADED_PRINTER_DRIVER *LoadPrinterDriver(const char *pszDriver);
|
|
|
|
extern INT16 PRTDRV_Control(LPPDEVICE lpDestDev, WORD wfunction, SEGPTR lpInData, SEGPTR lpOutData);
|
|
extern WORD PRTDRV_Enable(LPVOID lpDevInfo, WORD wStyle, LPCSTR lpDestDevType,
|
|
LPCSTR lpDeviceName, LPCSTR lpOutputFile, LPVOID lpData);
|
|
extern WORD PRTDRV_EnumDFonts(LPPDEVICE lpDestDev, LPSTR lpFaceName,
|
|
FARPROC16 lpCallbackFunc, LPVOID lpClientData);
|
|
extern DWORD PRTDRV_RealizeObject(LPPDEVICE lpDestDev, WORD wStyle,
|
|
LPVOID lpInObj, LPVOID lpOutObj,
|
|
SEGPTR lpTextXForm);
|
|
|
|
extern BOOL16 PRTDRV_EnumObj(LPPDEVICE lpDestDev, WORD iStyle, FARPROC16 lpfn, LPVOID lpb);
|
|
extern DWORD PRTDRV_ExtTextOut(LPPDEVICE lpDestDev, WORD wDestXOrg, WORD wDestYOrg,
|
|
RECT16 *lpClipRect, LPCSTR lpString, WORD wCount,
|
|
LPFONTINFO16 lpFontInfo, SEGPTR lpDrawMode,
|
|
SEGPTR lpTextXForm, SHORT *lpCharWidths,
|
|
RECT16 * lpOpaqueRect, WORD wOptions);
|
|
|
|
extern WORD PRTDRV_Output(LPPDEVICE lpDestDev,
|
|
WORD wStyle,
|
|
WORD wCount,
|
|
POINT16 *points,
|
|
LPLOGPEN16 lpPen,
|
|
LPLOGBRUSH16 lpBrush,
|
|
SEGPTR lpDrawMode,
|
|
HRGN hClipRgn);
|
|
|
|
DWORD PRTDRV_StretchBlt(LPPDEVICE lpDestDev,
|
|
WORD wDestX, WORD wDestY,
|
|
WORD wDestXext, WORD wDestYext,
|
|
LPPDEVICE lpSrcDev,
|
|
WORD wSrcX, WORD wSrcY,
|
|
WORD wSrcXext, WORD wSrcYext,
|
|
DWORD Rop3,
|
|
LPLOGBRUSH16 lpBrush,
|
|
SEGPTR lpDrawMode,
|
|
RECT16 *lpClipRect);
|
|
|
|
extern WORD PRTDRV_GetCharWidth(LPPDEVICE lpDestDev, LPINT lpBuffer,
|
|
WORD wFirstChar, WORD wLastChar, LPFONTINFO16 lpFontInfo,
|
|
SEGPTR lpDrawMode, SEGPTR lpTextXForm );
|
|
|
|
/* Wine driver functions */
|
|
|
|
extern const DC_FUNCTIONS *WIN16DRV_Init(void);
|
|
extern BOOL WIN16DRV_GetCharWidth( PHYSDEV dev, UINT firstChar, UINT lastChar, LPINT buffer );
|
|
|
|
extern BOOL WIN16DRV_GetTextExtentPoint( PHYSDEV dev, LPCWSTR str, INT count,
|
|
LPSIZE size );
|
|
extern BOOL WIN16DRV_GetTextMetrics( PHYSDEV dev, TEXTMETRICW *metrics );
|
|
|
|
extern BOOL WIN16DRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags,
|
|
const RECT *lprect, LPCWSTR str, UINT count,
|
|
const INT *lpDx );
|
|
extern BOOL WIN16DRV_LineTo( PHYSDEV dev, INT x, INT y );
|
|
extern BOOL WIN16DRV_Polygon(PHYSDEV dev, const POINT* pt, INT count );
|
|
extern BOOL WIN16DRV_Polyline(PHYSDEV dev, const POINT* pt, INT count );
|
|
extern BOOL WIN16DRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom);
|
|
extern HBITMAP WIN16DRV_SelectBitmap( PHYSDEV dev, HBITMAP handle );
|
|
extern HBRUSH WIN16DRV_SelectBrush( PHYSDEV dev, HBRUSH handle );
|
|
extern HFONT WIN16DRV_SelectFont( PHYSDEV dev, HFONT handle );
|
|
extern HPEN WIN16DRV_SelectPen( PHYSDEV dev, HPEN handle );
|
|
extern BOOL WIN16DRV_PatBlt( PHYSDEV dev, INT left, INT top,
|
|
INT width, INT height, DWORD rop );
|
|
extern BOOL WIN16DRV_Ellipse(PHYSDEV dev, INT left, INT top, INT right, INT bottom);
|
|
extern BOOL WIN16DRV_EnumDeviceFonts( PHYSDEV dev, LPLOGFONTW plf,
|
|
DEVICEFONTENUMPROC proc, LPARAM lp );
|
|
|
|
extern INT WIN16DRV_ExtDeviceMode(LPSTR lpszDriver, HWND hwnd,
|
|
LPDEVMODEA lpdmOutput,
|
|
LPSTR lpszDevice,
|
|
LPSTR lpszPort, LPDEVMODEA lpdmInput,
|
|
LPSTR lpszProfile, DWORD dwMode);
|
|
extern DWORD WIN16DRV_DeviceCapabilities(LPSTR lpszDriver, LPCSTR lpszDevice,
|
|
LPCSTR lpszPort, WORD fwCapability,
|
|
LPSTR lpszOutput, LPDEVMODEA lpdm);
|
|
|
|
/*
|
|
* Wine 16bit driver global variables
|
|
*/
|
|
extern SEGPTR win16drv_SegPtr_TextXForm;
|
|
extern LPTEXTXFORM16 win16drv_TextXFormP;
|
|
extern SEGPTR win16drv_SegPtr_DrawMode;
|
|
extern LPDRAWMODE win16drv_DrawModeP;
|
|
|
|
#endif /* __WINE_WIN16DRV_H */
|