2 * Exported functions from the PostScript driver.
4 * [Ext]DeviceMode, DeviceCapabilities, AdvancedSetupDialog.
6 * Will need ExtTextOut for winword6 (urgh!)
8 * Copyright 1998 Huw D M Davies
20 static LONG Resolutions
[][2] = { {600,600} };
23 /************************************************************************
27 * Updates dm1 with some fields from dm2
30 void PSDRV_MergeDevmodes(PSDRV_DEVMODE16
*dm1
, PSDRV_DEVMODE16
*dm2
,
33 /* some sanity checks here on dm2 */
34 if(dm2
->dmPublic
.dmFields
& DM_ORIENTATION
)
35 dm1
->dmPublic
.dmOrientation
= dm2
->dmPublic
.dmOrientation
;
36 /* NB PaperWidth is always < PaperLength */
38 if(dm2
->dmPublic
.dmFields
& DM_PAPERSIZE
) {
41 for(page
= pi
->ppd
->PageSizes
; page
; page
= page
->next
) {
42 if(page
->WinPage
== dm2
->dmPublic
.dmPaperSize
)
46 dm1
->dmPublic
.dmPaperSize
= dm2
->dmPublic
.dmPaperSize
;
47 dm1
->dmPublic
.dmPaperWidth
= page
->PaperDimension
->x
*
49 dm1
->dmPublic
.dmPaperLength
= page
->PaperDimension
->y
*
51 TRACE(psdrv
, "Changing page to %s %d x %d\n", page
->FullName
,
52 dm1
->dmPublic
.dmPaperWidth
, dm1
->dmPublic
.dmPaperLength
);
54 TRACE(psdrv
, "Trying to change to unsupported pagesize %d\n",
55 dm2
->dmPublic
.dmPaperSize
);
59 if(dm2
->dmPublic
.dmFields
& DM_DEFAULTSOURCE
) {
62 for(slot
= pi
->ppd
->InputSlots
; slot
; slot
= slot
->next
) {
63 if(slot
->WinBin
== dm2
->dmPublic
.dmDefaultSource
)
67 dm1
->dmPublic
.dmDefaultSource
= dm2
->dmPublic
.dmDefaultSource
;
68 TRACE(psdrv
, "Changing bin to '%s'\n", slot
->FullName
);
70 TRACE(psdrv
, "Trying to change to unsupported bin %d\n",
71 dm2
->dmPublic
.dmDefaultSource
);
82 /*******************************************************************
84 * PSDRV_NewPrinterDlgProc32
88 LRESULT WINAPI
PSDRV_NewPrinterDlgProc32(HWND32 hWnd
, UINT32 wMsg
,
89 WPARAM32 wParam
, LPARAM lParam
)
93 TRACE(psdrv
,"WM_INITDIALOG lParam=%08lX\n", lParam
);
94 ShowWindow32(hWnd
, SW_SHOWNORMAL
);
98 switch (LOWORD(wParam
)) {
100 EndDialog32(hWnd
, TRUE
);
104 EndDialog32(hWnd
, FALSE
);
116 LRESULT WINAPI
PSDRV_AdvancedSetupDlgProc32(HWND32 hWnd
, UINT32 wMsg
,
117 WPARAM32 wParam
, LPARAM lParam
)
121 TRACE(psdrv
,"WM_INITDIALOG lParam=%08lX\n", lParam
);
122 SendDlgItemMessage32A(hWnd
, 99, CB_ADDSTRING32
, 0,
123 (LPARAM
)"Default Tray");
124 ShowWindow32(hWnd
, SW_SHOWNORMAL
);
128 switch (LOWORD(wParam
)) {
130 EndDialog32(hWnd
, TRUE
);
134 EndDialog32(hWnd
, FALSE
);
138 DialogBoxIndirectParam32A( WIN_GetWindowInstance( hWnd
),
139 SYSRES_GetResPtr( SYSRES_DIALOG_PSDRV_NEWPRINTER
),
140 hWnd
, PSDRV_NewPrinterDlgProc32
, (LPARAM
) NULL
);
153 /**************************************************************
155 * PSDRV_AdvancedSetupDialog16 [WINEPS.93]
157 * Presumably dev1 and dev2 are in and out, don't know which is which yet.
158 * Not sure about return value either. (I haven't got any docs on this at all)
161 INT16 WINAPI
PSDRV_AdvancedSetupDialog16(HWND16 hwnd
, HANDLE16 hDriver
,
162 LPDEVMODE16 dev1
, LPDEVMODE16 dev2
)
165 TRACE(psdrv
, "hwnd = %04x, hDriver = %04x dev1=%p dev2=%p\n", hwnd
,
166 hDriver
, dev1
, dev2
);
171 return DialogBoxIndirectParam32A( WIN_GetWindowInstance( hwnd
),
172 SYSRES_GetResPtr( SYSRES_DIALOG_PSDRV_ADVANCEDSETUP
),
173 hwnd
, PSDRV_AdvancedSetupDlgProc32
, (LPARAM
) NULL
);
179 /***************************************************************
181 * PSDRV_ExtDeviceMode16 [WINEPS.90]
183 * Just returns default devmode at the moment
185 INT16 WINAPI
PSDRV_ExtDeviceMode16(HWND16 hwnd
, HANDLE16 hDriver
,
186 LPDEVMODE16 lpdmOutput
, LPSTR lpszDevice
, LPSTR lpszPort
,
187 LPDEVMODE16 lpdmInput
, LPSTR lpszProfile
, WORD fwMode
)
189 PRINTERINFO
*pi
= PSDRV_FindPrinterInfo(lpszDevice
);
192 "(hwnd=%04x, hDriver=%04x, devOut=%p, Device='%s', Port='%s', devIn=%p, Profile='%s', Mode=%04x)\n",
193 hwnd
, hDriver
, lpdmOutput
, lpszDevice
, lpszPort
, lpdmInput
, lpszProfile
,
197 return sizeof(DEVMODE16
); /* Just copy dmPublic bit of PSDRV_DEVMODE */
199 if((fwMode
& DM_PROMPT
) || (fwMode
& DM_UPDATE
))
200 FIXME(psdrv
, "Mode %d not implemented\n", fwMode
);
202 if(fwMode
& DM_MODIFY
) {
203 TRACE(psdrv
, "DM_MODIFY set. devIn->dmFields = %08lx\n", lpdmInput
->dmFields
);
204 PSDRV_MergeDevmodes(pi
->Devmode
, (PSDRV_DEVMODE16
*)lpdmInput
, pi
);
207 if(fwMode
& DM_COPY
) {
208 memcpy(lpdmOutput
, pi
->Devmode
, sizeof(DEVMODE16
));
214 /***************************************************************
216 * PSDRV_DeviceCapabilities16 [WINEPS.91]
219 DWORD WINAPI
PSDRV_DeviceCapabilities16(LPSTR lpszDevice
, LPSTR lpszPort
,
220 WORD fwCapability
, LPSTR lpszOutput
, LPDEVMODE16 lpdm
)
224 pi
= PSDRV_FindPrinterInfo(lpszDevice
);
225 TRACE(psdrv
, "Cap=%d. Got PrinterInfo = %p\n", fwCapability
, pi
);
227 switch(fwCapability
) {
232 WORD
*wp
= (WORD
*)lpszOutput
;
235 for(ps
= pi
->ppd
->PageSizes
; ps
; ps
= ps
->next
, i
++)
236 if(lpszOutput
!= NULL
)
244 POINT16
*pt
= (POINT16
*)lpszOutput
;
247 for(ps
= pi
->ppd
->PageSizes
; ps
; ps
= ps
->next
, i
++)
248 if(lpszOutput
!= NULL
) {
249 pt
->x
= ps
->PaperDimension
->x
* 254.0 / 72.0;
250 pt
->y
= ps
->PaperDimension
->y
* 254.0 / 72.0;
259 char *cp
= lpszOutput
;
262 for(ps
= pi
->ppd
->PageSizes
; ps
; ps
= ps
->next
, i
++)
263 if(lpszOutput
!= NULL
) {
264 strncpy(cp
, ps
->FullName
, 64);
272 return pi
->ppd
->LandscapeOrientation
? pi
->ppd
->LandscapeOrientation
: 90;
277 WORD
*wp
= (WORD
*)lpszOutput
;
280 for(slot
= pi
->ppd
->InputSlots
; slot
; slot
= slot
->next
, i
++)
281 if(lpszOutput
!= NULL
)
282 *wp
++ = slot
->WinBin
;
289 char *cp
= lpszOutput
;
292 for(slot
= pi
->ppd
->InputSlots
; slot
; slot
= slot
->next
, i
++)
293 if(lpszOutput
!= NULL
) {
294 strncpy(cp
, slot
->FullName
, 24);
301 case DC_ENUMRESOLUTIONS
:
302 if(lpszOutput
!= NULL
)
303 memcpy(lpszOutput
, Resolutions
, sizeof(Resolutions
));
304 return sizeof(Resolutions
) / sizeof(Resolutions
[0]);
308 FIXME(psdrv
, "Unsupported capability %d\n", fwCapability
);
313 /***************************************************************
315 * PSDRV_DeviceMode16 [WINEPS.13]
318 void WINAPI
PSDRV_DeviceMode16(HWND16 hwnd
, HANDLE16 hDriver
,
319 LPSTR lpszDevice
, LPSTR lpszPort
)
321 PSDRV_ExtDeviceMode16( hwnd
, hDriver
, NULL
, lpszDevice
, lpszPort
, NULL
,