Index of Section 3 Manual Pages
| Interix / SUA | libXp.3 | Interix / SUA |
libXp(3Xp) XPRINT FUNCTIONS libXp(3Xp)
NAME
libXp - X Print Client Library
SYNOPSIS
cc [ flag... ] file...-lXp [ library... ]
#include
DESCRIPTION
libXp provides public APIs to allow client applications to
render to non-display devices.
When an application wishes to print, it makes a display
connection to the X print server and asks to see the list
of printers available with an XpGetPrinterList() request.
Once the application has selected a printer, it creates
and sets a print context using XpCreateContext() and
XpSetContext().
The Print Context represents the embodiment of the printer
selected. It is initialized by the Xprint server at XpCre-
ateContext() time to contain a printer's default capabili-
ties, as well as, the description of its overall capabil-
ties, and to maintain the state of settings on the
printer, the state of rendering against the printer, and
the rendered output.
The Print Context affects how the DDX driver generates its
page description language (PDL) and how the PDL is submit-
ted to a spooler. The print context may also affect fonts
and other elements in the dix layer of the X Print Server.
The print contexts can be shared among processes. Applica-
tions can enlist the help of secondary processes to manip-
ulate print options in the Print context rather than tak-
ing on the task directly.
Once an application has set options within the print con-
text, it makes calls such as XpStartJob() to delineate
jobs, documents, and pages within a sequence of normal X
calls.
A job is a collection of documents, where each document is
in turn a collection of pages. When XpEndJob() is called,
the resulting PDL is either sent to a print spooler or can
be retrieved by the application itself.
The developer basically has to make changes to the X
application to make use of the X Print Service.
A simple X application supplemented with some of the libXp
routines might look like this:
#include
#include
main()
{
Display *pdpy;
Screen *pscreen;
Window pwin;
XPPrinterList plist;
XPContext pcontext;
int plistCnt;
char *attrPool;
#define NPOOLTYPES 5
XPAttributes poolType[NPOOLTYPES] = {XPJobAttr,XPDocAttr,XPPageAttr,
XPPrinterAttr,XPServerAttr};
int i;
unsigned short width, height;
XRectangle rect;
char *printServerName = ":1";
char *mylaser = "varos";
/*
* connect to the X print server
*/
pdpy = XOpenDisplay( printServerName );
/*
* see if the printer "mylaser" is available
*/
plist = XpGetPrinterList (pdpy, mylaser, &plistCnt );
/*
* Initialize a print context representing "mylaser"
*/
pcontext = XpCreateContext( pdpy, plist[0].name );
XpFreePrinterList( plist );
/*
* Possibly modify attributes in the print context
*/
for(i=0;i < NPOOLTYPES;i++) {
if(attrPool = XpGetAttributes( pdpy, pcontext, poolType[i] )) {
/* twiddle attributes */
/*
XpSetAttributes( pdpy, pcontext, poolType[i],
attrPool, XPAttrMerge );
*/
XFree(attrPool);
}
}
/*
* Set a print server, then start a print job against it
*/
XpSetContext( pdpy, pcontext );
XpStartJob( pdpy, XPSpool );
/*
* Generate the first page
*/
pscreen = XpGetScreenOfContext( pdpy, pcontext );
XpGetPageDimensions( pdpy, pcontext, &width, &height,
&rect);
pwin = XCreateSimpleWindow( pdpy, RootWindowOfScreen( pscreen ),
rect.x, rect.y, rect.width, rect.height, 2,
BlackPixelOfScreen( pscreen),
WhitePixelOfScreen( pscreen));
XpStartPage( pdpy, pwin );
/* usual rendering stuff..... */
XpEndPage( pdpy );
XpStartPage( pdpy, pwin );
/* some more rendering..... */
XpEndPage( pdpy );
/*
* End the print job - the final results are sent by the X print
* server to the spooler sub system.
*/
XpEndJob( pdpy );
XpDestroyContext( pdpy, pcontext );
XCloseDisplay( pdpy );
}
SEE ALSO
Xprt(1), XpCreateContext(3Xp), XpDestroyContext(3Xp),
XpEndJob(3Xp), XpEndPage(3Xp), XpFreePrinterList(3Xp),
XpGetAttributes(3Xp), XpGetPageDimensions(3Xp), XpGet-
PrinterList(3Xp), XpSetAttributes(3Xp), XpSetContext(3Xp),
XpStartJob(3Xp), XpStartPage(3Xp)
X Print Service Extension Library
X Version 11 libXp 1.0.0 libXp(3Xp)