XmPrintToFile (3) - Linux Manuals
XmPrintToFile: Retrieves and saves data that
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
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));
}