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
19 static LONG Resolutions
[][2] = { {600,600} };
22 /************************************************************************
26 * Updates dm1 with some fields from dm2
29 void PSDRV_MergeDevmodes(PSDRV_DEVMODE16
*dm1
, PSDRV_DEVMODE16
*dm2
,
32 /* some sanity checks here on dm2 */
33 if(dm2
->dmPublic
.dmFields
& DM_ORIENTATION
)
34 dm1
->dmPublic
.dmOrientation
= dm2
->dmPublic
.dmOrientation
;
35 /* NB PaperWidth is always < PaperLength */
37 if(dm2
->dmPublic
.dmFields
& DM_PAPERSIZE
) {
40 for(page
= pi
->ppd
->PageSizes
; page
; page
= page
->next
) {
41 if(page
->WinPage
== dm2
->dmPublic
.dmPaperSize
)
45 dm1
->dmPublic
.dmPaperSize
= dm2
->dmPublic
.dmPaperSize
;
46 dm1
->dmPublic
.dmPaperWidth
= page
->PaperDimension
->x
*
48 dm1
->dmPublic
.dmPaperLength
= page
->PaperDimension
->y
*
50 TRACE(psdrv
, "Changing page to %s %d x %d\n", page
->FullName
,
51 dm1
->dmPublic
.dmPaperWidth
, dm1
->dmPublic
.dmPaperLength
);
53 TRACE(psdrv
, "Trying to change to unsupported pagesize %d\n",
54 dm2
->dmPublic
.dmPaperSize
);
58 if(dm2
->dmPublic
.dmFields
& DM_DEFAULTSOURCE
) {
61 for(slot
= pi
->ppd
->InputSlots
; slot
; slot
= slot
->next
) {
62 if(slot
->WinBin
== dm2
->dmPublic
.dmDefaultSource
)
66 dm1
->dmPublic
.dmDefaultSource
= dm2
->dmPublic
.dmDefaultSource
;
67 TRACE(psdrv
, "Changing bin to '%s'\n", slot
->FullName
);
69 TRACE(psdrv
, "Trying to change to unsupported bin %d\n",
70 dm2
->dmPublic
.dmDefaultSource
);
81 /*******************************************************************
83 * PSDRV_NewPrinterDlgProc32
87 LRESULT WINAPI
PSDRV_NewPrinterDlgProc(HWND hWnd
, UINT wMsg
,
88 WPARAM wParam
, LPARAM lParam
)
92 TRACE(psdrv
,"WM_INITDIALOG lParam=%08lX\n", lParam
);
93 ShowWindow(hWnd
, SW_SHOWNORMAL
);
97 switch (LOWORD(wParam
)) {
99 EndDialog(hWnd
, TRUE
);
103 EndDialog(hWnd
, FALSE
);
115 LRESULT WINAPI
PSDRV_AdvancedSetupDlgProc(HWND hWnd
, UINT wMsg
,
116 WPARAM wParam
, LPARAM lParam
)
120 TRACE(psdrv
,"WM_INITDIALOG lParam=%08lX\n", lParam
);
121 SendDlgItemMessageA(hWnd
, 99, CB_ADDSTRING
, 0,
122 (LPARAM
)"Default Tray");
123 ShowWindow(hWnd
, SW_SHOWNORMAL
);
127 switch (LOWORD(wParam
)) {
129 EndDialog(hWnd
, TRUE
);
133 EndDialog(hWnd
, FALSE
);
137 DialogBoxIndirectParamA( WIN_GetWindowInstance( hWnd
),
138 SYSRES_GetResPtr( SYSRES_DIALOG_PSDRV_NEWPRINTER
),
139 hWnd
, PSDRV_NewPrinterDlgProc
, (LPARAM
) NULL
);
152 /**************************************************************
154 * PSDRV_AdvancedSetupDialog16 [WINEPS.93]
157 WORD WINAPI
PSDRV_AdvancedSetupDialog16(HWND16 hwnd
, HANDLE16 hDriver
,
158 LPDEVMODE16 devin
, LPDEVMODE16 devout
)
161 TRACE(psdrv
, "hwnd = %04x, hDriver = %04x devin=%p devout=%p\n", hwnd
,
162 hDriver
, devin
, devout
);
167 return DialogBoxIndirectParamA( WIN_GetWindowInstance( hwnd
),
168 SYSRES_GetResPtr( SYSRES_DIALOG_PSDRV_ADVANCEDSETUP
),
169 hwnd
, PSDRV_AdvancedSetupDlgProc
, (LPARAM
) NULL
);
175 /***************************************************************
177 * PSDRV_ExtDeviceMode16 [WINEPS.90]
179 * Just returns default devmode at the moment
181 INT16 WINAPI
PSDRV_ExtDeviceMode16(HWND16 hwnd
, HANDLE16 hDriver
,
182 LPDEVMODE16 lpdmOutput
, LPSTR lpszDevice
, LPSTR lpszPort
,
183 LPDEVMODE16 lpdmInput
, LPSTR lpszProfile
, WORD fwMode
)
185 PRINTERINFO
*pi
= PSDRV_FindPrinterInfo(lpszDevice
);
188 "(hwnd=%04x, hDriver=%04x, devOut=%p, Device='%s', Port='%s', devIn=%p, Profile='%s', Mode=%04x)\n",
189 hwnd
, hDriver
, lpdmOutput
, lpszDevice
, lpszPort
, lpdmInput
, lpszProfile
,
193 return sizeof(DEVMODE16
); /* Just copy dmPublic bit of PSDRV_DEVMODE */
195 if((fwMode
& DM_PROMPT
) || (fwMode
& DM_UPDATE
))
196 FIXME(psdrv
, "Mode %d not implemented\n", fwMode
);
198 if(fwMode
& DM_MODIFY
) {
199 TRACE(psdrv
, "DM_MODIFY set. devIn->dmFields = %08lx\n", lpdmInput
->dmFields
);
200 PSDRV_MergeDevmodes(pi
->Devmode
, (PSDRV_DEVMODE16
*)lpdmInput
, pi
);
203 if(fwMode
& DM_COPY
) {
204 memcpy(lpdmOutput
, pi
->Devmode
, sizeof(DEVMODE16
));
210 /***************************************************************
212 * PSDRV_DeviceCapabilities16 [WINEPS.91]
215 DWORD WINAPI
PSDRV_DeviceCapabilities16(LPSTR lpszDevice
, LPSTR lpszPort
,
216 WORD fwCapability
, LPSTR lpszOutput
, LPDEVMODE16 lpdm
)
220 pi
= PSDRV_FindPrinterInfo(lpszDevice
);
221 TRACE(psdrv
, "Cap=%d. Got PrinterInfo = %p\n", fwCapability
, pi
);
223 switch(fwCapability
) {
228 WORD
*wp
= (WORD
*)lpszOutput
;
231 for(ps
= pi
->ppd
->PageSizes
; ps
; ps
= ps
->next
, i
++)
232 if(lpszOutput
!= NULL
)
240 POINT16
*pt
= (POINT16
*)lpszOutput
;
243 for(ps
= pi
->ppd
->PageSizes
; ps
; ps
= ps
->next
, i
++)
244 if(lpszOutput
!= NULL
) {
245 pt
->x
= ps
->PaperDimension
->x
* 254.0 / 72.0;
246 pt
->y
= ps
->PaperDimension
->y
* 254.0 / 72.0;
255 char *cp
= lpszOutput
;
258 for(ps
= pi
->ppd
->PageSizes
; ps
; ps
= ps
->next
, i
++)
259 if(lpszOutput
!= NULL
) {
260 strncpy(cp
, ps
->FullName
, 64);
268 return pi
->ppd
->LandscapeOrientation
? pi
->ppd
->LandscapeOrientation
: 90;
273 WORD
*wp
= (WORD
*)lpszOutput
;
276 for(slot
= pi
->ppd
->InputSlots
; slot
; slot
= slot
->next
, i
++)
277 if(lpszOutput
!= NULL
)
278 *wp
++ = slot
->WinBin
;
285 char *cp
= lpszOutput
;
288 for(slot
= pi
->ppd
->InputSlots
; slot
; slot
= slot
->next
, i
++)
289 if(lpszOutput
!= NULL
) {
290 strncpy(cp
, slot
->FullName
, 24);
297 case DC_ENUMRESOLUTIONS
:
298 if(lpszOutput
!= NULL
)
299 memcpy(lpszOutput
, Resolutions
, sizeof(Resolutions
));
300 return sizeof(Resolutions
) / sizeof(Resolutions
[0]);
304 FIXME(psdrv
, "Unsupported capability %d\n", fwCapability
);
309 /***************************************************************
311 * PSDRV_DeviceMode16 [WINEPS.13]
314 void WINAPI
PSDRV_DeviceMode16(HWND16 hwnd
, HANDLE16 hDriver
,
315 LPSTR lpszDevice
, LPSTR lpszPort
)
317 PSDRV_ExtDeviceMode16( hwnd
, hDriver
, NULL
, lpszDevice
, lpszPort
, NULL
,