Provided by: libmotif-dev_2.3.8-3.1build1_amd64 bug

NAME

       XmPrintToFile — Retrieves and saves data that would normally be printed by the X Print Server.

SYNOPSIS

       #include <Xm/Print.h>
       XtEnumXmPrintToFile(
       Display*dpy,
       Stringfilename,
       XPFinishProcfinish_proc,
       XtPointerclient_data);

DESCRIPTION

       XmPrintToFile  hides  the  details of X display connection and XpGetDocumentData to the Motif application
       programmer.

       This function is a convenience routine that  hides  the  details  of  the  X  and  Xp  internals  to  the
       application  programmer  by  calling  the  XpGetDocumentData  function  with  appropriate save and finish
       callbacks.

       This is used in the context of X Printing when the user has specified the "print-to-file" option  from  a
       regular Print Setup Dialog box.

       XmPrintToFile first tries to open the given filename for writing and returns False if it can't.  Else, it
       uses XpGetDocumentData, giving it a save proc that writes the data received in the file and a finish proc
       that  closes  the file or removes it on an unsuccessful termination.  It calls finish_proc at that point,
       passing it the argument received from the Xp layer (status == XPGetDocFinished means the  file  is  valid
       and was closed, otherwise the file was removed).

       XmPrintToFile  is  non-blocking;  if  it  returns  successfully,  it  just  means  the  file  was  opened
       successfully, not that all the data was received.

       dpy       Print display connection.

       filename  Name of the file to put the print data in.

       finish_proc
                 Called when all the data has been received.

       client_data
                 Passed with the finish_proc.

RETURN VALUE

       Returns False if the filename could not be created or opened for writing, True otherwise.

ERRORS/WARNINGS

       Not applicable

EXAMPLES

       A typical OK callback from a DtPrintSetupBox:

       PrintOKCallback(widget...)
       /*-------------*/
       {   int save_data = XPSpool;

           pshell = XmPrintSetup (widget, pbs->print_screen,
                                          "Print", NULL, 0);

           XtAddCallback(pshell, XmNstartJobCallback, startJobCB, data);

           if (pbs->destination == DtPRINT_TO_FILE)
                        save_data = XPGetData;

           /* start job must precede XpGetDocumentData in XmPrintToFile */
           XpStartJob(XtDisplay(pshell), save_data);
           XFlush(XtDisplay(pshell));  /* maintain the sequence
                                        between startjob and getdocument */

           /* setup print to file */
           if (pbs->destination == DtPRINT_TO_FILE)
               XmPrintToFile(XtDisplay(pshell),
                                        pbs->dest_info, FinishPrintToFile, NULL);
           }

       }

       static void
       startJobCB(Widget, XtPointer call_data, XtPointer client_data)
       {
         print(p);   /* rendering happens here */

         XpEndJob(XtDisplay(p->print_shell));

         /* clean up */
         XtDestroyWidget(p->print_shell);
                 XtCloseDisplay(XtDisplay(p->print_shell));
       }

SEE ALSO

       XmPrintSetup(3), XmPrintShell(3), XmRedisplayWidget(3), XmPrintPopupPDM(3)

                                                                                                XmPrintToFile(3)