home *** CD-ROM | disk | FTP | other *** search
- /*
- #### # # # #
- # # # # # The FreeWare C library for
- # # ## ### # # # # ### RISC OS machines
- # # # # # # # # # # # ___________________________________
- # # #### ### ## # # # #
- # # # # # # # # # # Please refer to the accompanying
- #### ### #### # # ##### # ### documentation for conditions of use
- ________________________________________________________________________
-
- File: Print.h
- Author: Copyright © 1995 Julian Smith
- Version: 1.00 (20 Jan 1995)
- Purpose: Automatic handling of RO 3 wimp printing protocol messages,
- and some of the PDriver calls involved in printing.
-
- */
-
- #ifndef __Desk_Print_h
- #define __Desk_Print_h
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #ifndef __Desk_Wimp_h
- #include "Desk.Wimp.h"
- #endif
-
-
- #ifndef __Desk_PDriver_h
- #include "Desk.PDriver.h"
- #endif
-
-
-
-
- typedef struct Desk_print_block {
- void *reference; /* As passed to Desk_Print_StartPrint. */
- char *jobtitle; /* As passed to Desk_Print_StartPrint. */
- Desk_printer_info printerinfo; /* This info may be useful to printfn. */
- Desk_print_job job; /* The current job handle. */
- Desk_print_job oldjob; /* The previous job (if any). */
- }
- Desk_print_block;
-
-
- enum {
- Desk_print_result_OK = 0, /* Printing is finished. */
- Desk_print_result_QUEUED, /* Data has been saved into printer queue. */
- Desk_print_result_NEEDPRINTERMANAGER, /* printfn==NULL, but !Printers not running. */
- Desk_print_result_PRINTERROR, /* Desk_message_PRINTERROR received. */
- Desk_print_result_SAVEFAILED, /* savefn failed. */
- Desk_print_result_CANTSAVE, /* savefn==NULL, !Printers busy */
- Desk_print_result_CANTOPENPRINTER, /* Desk_File_Open( "Printer:") failed. */
- Desk_print_result_FAILED /* Something else has gone wrong. */
- };
-
- typedef int Desk_print_result;
- /* If result>255, it is an (Desk_os_error *), otherwise it is a Desk_print_result_* */
-
-
-
- typedef Desk_bool (*Desk_print_printfn)( Desk_print_block *print);
- typedef Desk_bool (*Desk_print_savefn)( Desk_print_block *print, Desk_message_datasaveack *datasaveack);
- typedef void (*Desk_print_resultfn)( Desk_print_block *print, Desk_print_result result);
-
-
-
- void Desk_Print_StartPrint(
- Desk_print_printfn printfn, /* Called to do the actual printing after */
- /* the wimp messageing has finished. */
- Desk_print_savefn savefn, /* Called if print job is queued. */
- Desk_print_resultfn resulfn, /* Always called. */
- void *reference, /* Always passed to the above functions. */
- int filetype, /* Used if print data is saved in queue. */
- int estsize, /* Used if print data is saved in queue. */
- char *leafname, /* Used if print data is saved in queue. */
- char *jobtitle
- );
- /*
-
- Call this function to start a printout. Desk_Print_StartPrint does all the
- wimp message handling needed to start a print job, sets up the printer
- driver and then calls 'printfn'.
-
- Returns NOERROR if the print protocol was started ok. Otherwise returns
- ERROR.
-
- Note that 'jobtitle' is *not* strcpy-ed, so the string must be present
- until printing has finished.
-
- 'printfn' should print the data. 'savefn' should save the data to a file
- in a form that can be printed later - this is done if the print job
- needs to be queued.
-
- Both 'printfn' and 'savefn' should return ERROR or NOERROR (see
- DeskLib:Core.h).
-
- 'resultfn' will always be called with the result of the print.
-
- Pass NULL for printfn or savefn if you can't print directly or can't
- save the data to a file. Obviously, if both printfn and savefn are NULL,
- the print will fail.
-
- 'savefn' will be called if !Printers already has a queue, or if
- 'printfn'==NULL. In this case, !Printers prints the file itself when it
- comes to top of printer queue if it can (eg a text file), else it
- broadcasts Desk_message_PRINTTYPEODD. You should register an event handler
- for Desk_message_PRINTTYPEODD if resultfn is told that the job has been
- queued *and* savefn has saved the data in a non-standard format that
- !Printers won't be able to print itself.
-
- 'printfn' will be called if !Printers is not running but there is a
- printer driver loaded, or if !Printers has no queue of print jobs.
-
- 'resultfn' is always called, with a Desk_print_result. If greater than
- 256, it is an (Desk_os_error *) from a PDriver SWi.
-
- */
-
- #ifdef __cplusplus
- }
- #endif
-
-
- #endif
-