Hi!
----
Below is a quick crashcourse-style overview of Xprint:
1. General:
"Xprint" is a printing system which enables X11 applications to use
devices like printers, FAX or create documents in vector formats like
PostScript, PDF or SVGprint etc. The rendering commands of the client
are transformed by the print DDX into vector rendering instructions
(e.g. you don't operate on bitmaps; however Pixmaps are supported in a
way that all rendering instructions to a pixmap are "recorded" and
played-back when you do a |XCopyArea()| or similar calls), e.g. the
paper output is a (usually scalable) vector representation of the
client's rendering commands.
Since the output is on a "paginated device" (e.g. paper surface) which
cannot scroll etc. the server has a X11 extension ("XpExtension") to
control how the output is distributed over a print job, one or multiple
documents in a print job and the pages itself (e.g. StartJob,
StartDocument, StartPage, EndPage, EndDocument, EndJob), the generation
of matching X11 events for these calls (for example that the
XawPrintShell widget can "drive itself" using the events alone) and to
handle the additional attributes of a print job, e.g. paper size, page
orientation (landscape, portrait, reverse-landscape etc,), resolution
etc. Each job gets a XpContext assigned which can be shared between
multiple clients (which means multiple clients can render into one
window/print job; in CDE's case this was used to let a different process
to display the print dialog and configure the XpContext and then pass
this to the calling application (which can read all he configuration
information from the XpContext)) which is used to store the extension
properties.
2. The server:
The server contains all the generic X11, Xprint framework and DDX stuff.
On startup the server looks at the XPCONFIGDIR variable and reads the
configuration - the configuration says the server how to find a list of
printers, the server then uses these names to try to assign a list of
"model-config" names to these names. The "model-configs" contain printer
propperties, e.g. which capabilties the printer and DDX has and a list
of builtin fonts (these are the PMF fonts which are like PCF except that
they only contain the glyph metrics (measured at the printers highest
resolution; for PostScript it's defined at 1200x1200 DPI) and no font
bitmaps itself). More server configuration details about this are
described in the attached "dtprint_fspec.pdf".
WARNING: The Xprt server MUST find it's configuration, otherwise it will
go completly nuts - which means you must make any Xprt package depend on
the Xprint server configuration (or put it into one file) to avoid that
the server misbehaves (this issue caused lot pain in the past since
people tried to run Xprt like this $ Xprt :30 & # and then wondered by
the output looks horrible (<--- understatement) ...).
3. Notes about font handling:
Xprt handles fonts a bit different than a normal Xserver since it has
support for printer-builtin fonts which are rendered by the printer
itself - these fonts are only available when a XpContext is completely
configured for a printer and the print resolution matches some
requirements). We modified the "xlsfonts" utilty to accept a printer
name and resolution to list these fonts on demand.
4. Suported X11 extensions:
* Most non-video-specific extensions work with Xprint, e.g. ...
- DOUBLE-BUFFER
- SHAPE,
- TOG-CUP
- GLX (Xprt supports the MESA rasterizer for all DDXs (Hitachi
developled a GL renderer for PostScript but never released it to
X.org... ;-( (the code is still stuck somewhere in h*ll because there
was never a way to negotiate a solution which would allow to use the
MESA and the PSGL bits in one binary (and keithp did another slice of
bashing to p*ss them off (sorry for cursing but it still hurts a bit...)))))
... will work. Other extensions like "MIT-SHM" and "DGA" are not
implemented because they explicitly operate on bitmaps and the RENDER
implementation in the PostScript DDX is unfinished (it would go through
bits of PSGL which is currently... erm.. stuck...).
5. Looking-up the Xprint server ("Xprt"):
Originally CDE used both a Xrm resource called *XpServerList and an
environment variable ("XPSERVERLIST") to lookup the servers (note:
XPSERVERLIST may contain _multiple_ servers, for example one
network-wide one, one machine-global and one running per-user), however
the applications/utilties/tools in the X11 tree and "mozilla"/"firefox"
only use the XPSERVERLIST variable. Since CDE is no longer involved we
invented a new way to populate the XPSERVERLIST variable which is done
using the /etc/init.d/xprint script which is responsible to start/stop
and "autoconfigure" a machine-wide Xprt instance when called as user
"root" or a per-user instance when called as normal user. The script
contains a seperate command called "getserverlist" which will print the
server(s) ; the output of this script is used by
/etc/profile.d/xprint.(sh|csh) to set the XPSERVERLIST variable for
login shell sessions.
6. Client-side helper applications:
X.org comes with two client-side helper applications:
- "xplsprinters" can list printers and printer attributes (similar to
xlsfonts&&xlsclients)
- "xpreashprinterlist" can be used to tell the server to check the list
of printers and re-fresh it (this will not re-load the configutation
itself, only the list of printers itself is refreshed).
Additionally some other tools like "xdpyinfo" and "xset" have been made
aware of the Xprint extension.
Uhm... AFAIK that's all for now...
... attached are "dtprint_fspec.pdf" and the old Xprint FAQ (<---
warning: Marketing language inside...) ...
----
Bye,
Roland
--
__ . . __
(o.\ \/ /.o) roland.mainz at nrubsig.org
\__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer
/O /==\ O\ TEL +49 641 7950090
(;O/ \/ \O;)
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.opensolaris.org/pipermail/xwin-discuss/attachments/20080416/c1e39a33/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dtprint_fspec.pdf
Type: application/pdf
Size: 407986 bytes
Desc: not available
URL:
<http://mail.opensolaris.org/pipermail/xwin-discuss/attachments/20080416/c1e39a33/attachment.pdf>