Index of Section 3 Manual Pages

Interix / SUAlibXp.3Interix / 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)

Interix / SUAHosted at SUA Community for Interix, SUA and SFUInterix / SUA