winspool: use printmonitors to manage the Ports
Detlef Riekenberg
wine.dev at web.de
Fri Jul 28 08:17:05 CDT 2006
Hi.
Printing in wine use gdi32.dll, gdi.exe, winspool.drv and wineps.drv as
Printer-Driver with CUPS/LPR as backend.
Many things are not correct (See: http://wiki.winehq.org/Printing ).
After some Patches, Wine is able to manage Printmonitors.
With the current work, a framework is added and wine start to use the
Printmonitors to manage the Printerports.
(Patch for wine-0.9.18, should also work for current HEAD)
I used various monitors for testing:
1: redmonnt.dll from RedMon 1.7
2: pdfcmnnt.dll from PDFCreator 0.9.2
3: localspl.dll from w2ksp4
4: a partial portmonitor for local Ports, added to winspool.drv
You can use a native printui.dll and play with the "Ports"-Page
wine rundll32.exe printui.dll,PrintUIEntry /s
Some notes about the Patch.
- FAR is used in "ddk/winsplp.h", but this does not work with wine.
I removed that Keyword, but it is still present in the w2k3ddk
An alternative would be "#define FAR" and "#undef FAR" around
'#include "ddk/winsplp.h"' in "dlls/winspool.drv/info.c".
Another Idea?
- The Spooler-Configuration was still using the Path from the old
config - File. (Software\Wine\Wine\Config\Spooler\<Portname>)
Do we still need this? (A clean way is a seperate Portmonitor)
- native localspl.dll need a vailid Section [Ports] in "win.ini"
to load. (I used "FILE:=" and "LPT1:=" as entries)
- Only Portmonitors, that use "InitializePrintMonitor" are supported.
"InitializePrintMonitorUI" requires a "InitializePrintMonitor2" to
be implemented, but this is a later step.
- AddPort/ConfigurePort/DeletePort in localspl.dll need support for
"InitializePrintMonitor2" and all around XcvData.
- AddPort/ConfigurePort/DeletePort in the internal Portmonitor is not
complete. (As Example, I simple reuse the "Save to File" - Dialog)
- The codebase for winspool.drv is really large (>240k) and I want to
split the source. The correct way is creating "localspl.dll" for the
local Portmonitor (as w2k and above) and another dll for the CUPS/LPR
- Handling (and maybe Software\Wine\Wine\Config\Spooler\<Portname>).
A different fast hack is simple a new sourcefile for "winspool.drv"
for a CUPS/LPR-Monitor and a local Portmonitor.
- the internal Portmonitor uses the Registry, where the Ports - Section
from "win.ini" is redirected by "IniFileMapping" on windows.
- The Ports for the used CUPS/LPR - Printers is a later issue, when
wine starts to use the managed Ports.
Please try this Patch and point your Ideas and Hints here, so I can
split the code into a set of Patches that can go clean into the Tree.
Thanks to all for your Help
--
By By ...
... Detlef
-------------- next part --------------
A non-text attachment was scrubbed...
Name: add_localmon.diff.gz
Type: application/x-gzip
Size: 15459 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-devel/attachments/20060728/fbeb6b62/add_localmon.diff.bin
More information about the wine-devel
mailing list