Provided by: libxp-dev_1.0.2-1ubuntu1_amd64 bug

NAME

       XpGetDocumentData - Creates and initializes a new print context.

SYNOPSIS

             cc [ flag... ] file... -lXp [ library... ]
             #include <X11/extensions/Print.h>

       Status XpGetDocumentData ( data_display, context, save_proc, finish_proc, client_data )
             Display *data_display;
             XPContext context;
             XPSaveProc save_proc;
             XPFinishProc finish_proc;
             XPointer client_data;

ARGUMENTS

       data_display
              Specifies a pointer to the Display structure; returned from XOpenDisplay.

       context
              The print context from which document data is to be retrieved.

       save_proc
              A procedure to be registered and called repeatedly to save blocks of document data.

       finish_proc
              A  procedure  to  be  registered and called once when the print job has completed and all document
              data has been sent to save_proc.

       client_data
              Specifies client data to be passed to save_proc and finish_proc when called.

DESCRIPTION

       XpGetDocumentData registers callbacks that allow a "consumer"  to  continuously  retrieve  document  data
       generated  in  the  X  Print  Server  by a separate "producer", where both are referencing the same print
       context by way of different display connections. Though XpGetDocumentData retrieves  document  data,  its
       effect  is  bounded by XpStartJob and XpEndJob. XpGetDocumentData always returns immediately; if an error
       occurs and the callbacks cannot be registered, the return status is 0, else the return status is non-zero
       and the callbacks will be called sometime after the return from XpGetDocumentData. This producer/consumer
       exchange is set up when XpStartJob is called by the producer with output_mode  equal  XPGetData,  and  is
       subsequently  initiated  when  XpGetDocumentData is called by the consumer. Though XpStartJob will return
       immediately, further attempts to use the producer's display connection may be  blocked  by  the  X  Print
       Server until XpGetDocumentData is called on the consumer's display connection.

       Following  a  successful call to XpGetDocumentData, the consumer must enter a loop to process events from
       the server, for example, by calling XNextEvent. The event  processing  code  will  invoke  save_proc  and
       finish_proc  as  needed  to  consume  incoming  data.  To  avoid blocking indefinitely in XNextEvent, the
       consumer should select for XPPrintNotify events, and watch for XPEndJobNotify. This event  will  be  sent
       following  the  call  to  finish_proc and the consumer can safely exit the loop at this point. Aside from
       this processing of XPrintNotify events, data_display must not be used for any additional X requests until
       finish_proc is called and returns.

STRUCTURES

       The save_proc is defined in <X11/extensions/Print.h> as:

       typedef void (*XPSaveProc)( Display *data_display,
                                  XPContext context,
                                  unsigned char *data,
                                  unsigned int data_len,
                                  XPointer client_data);

       The save_proc is repeatedly called on each chunk of document data sent by the X Print Server until either
       XpEndJob or XpCancelJob is called. data_len specifies the number of bytes in data. The  memory  for  data
       itself is owned by the library, so save_proc should copy data to another location before returning. After
       the last block of data has been delivered to save_proc, finish_proc is called with final status.

       The finish_proc is defined in <X11/extensions/Print.h> as:

       typedef void (*XPFinishProc)( Display *data_display,
                                    XPContext context,
                                    XPGetDocStatus status,
                                    XPointer client_data);

       After  XpGetDocumentData  successfully  registers  the  callbacks,  any  generated X errors (for example,
       BadAlloc)  or  Xp  errors  (for  example,  XPBadContext  or  XPBadSequence)  that  are  the   result   of
       XpGetDocumentData  will cause the Xlib error handler to be invoked, and then will cause finish_proc to be
       called with a status of XPGetDocError. Any other activities (for example, a separate  process  destroying
       the  print  context) that prove fatal to the progress of XpGetDocumentData will also cause finish_proc to
       be called with a status of XPGetDocError.

       If XpGetDocumentData is called prior  to  XpStartJob,  then  an  XPBadSequence  error  is  generated  and
       finish_proc is called with XPGetDocError. If XpGetDocumentData is called after XpStartJob and output_mode
       was  specified  as  XPSpool,  then  an  XPBadSequence  error  is generated and finish_proc is called with
       XPGetDocError.  If the producer starts generating data and  the  consumer  cannot  consume  data  quickly
       enough, then the producer's display connection will be blocked by the X Print Server.

       Until  XpEndJob  or  XpCancelJob  is  called,  it  is  possible that various XPPrintNotify events will be
       generated (for example, a page has been canceled).  The data  passed  to  save_proc  is  not  necessarily
       organized according to the consumer's requests or any generated events, and its consistency is guaranteed
       only if the entire job completes successfully (i.e. without being canceled or generating an error).

       When  finish_proc  is  called,  sometime  after XpGetDocumentData is called and returns, status gives the
       completion status of the job and is defined in <X11/extensions/Print.h> as:

            #define XPGetDocFinished        0       /∗ normal termination */
            #define XPGetDocSecondConsumer  1       /∗ setup error */
            #define XPGetDocError           2       /∗ progress error */

       XPGetDocFinished indicates that all intended document data has been delivered by way  of  save_proc.  All
       cancellation  events  are guaranteed to have arrived by the time finished_proc is called, and they should
       be taken into consideration for evaluating the validity of the document data returned.

       XPGetDocSecondConsumer indicates that a consumer had already been established for the print context.  The
       X Print Server only supports one consumer per print context.

       XPGetDocError indicates that an error has been generated (for example, XPBadContext or XPBadSequence) and
       that no further document data will be delivered by the X Print Server to save_proc.

       After finish_proc returns, save_proc and finish_proc are unregistered and will no longer be called.

DIAGNOSTICS

       XPBadContext   A valid print context-id has not been set prior to making this call.

       XPBadSequence  The  function was not called in the proper order with respect to the other X Print Service
                      Extension calls (for example, XpGetDocumentData prior to XpStartJob).

SEE ALSO

       XpCancelJob(3Xp), XpEndJob(3Xp), XpStartJob(3Xp)

X Version 11                                       libXp 1.0.2                            XpGetDocumentData(3Xp)