/*
 *
 *	DISCLAIMER:
 *
 *	This program is provided as a service to the programmer
 *	community to demonstrate one or more features of the Amiga
 *	personal computer.  These code samples may be freely used
 *	for commercial or noncommercial purposes.
 * 
 * 	Commodore Electronics, Ltd ("Commodore") makes no
 *	warranties, either expressed or implied, with respect
 *	to the program described herein, its quality, performance,
 *	merchantability, or fitness for any particular purpose.
 *	This program is provided "as is" and the entire risk
 *	as to its quality and performance is with the user.
 *	Should the program prove defective following its
 *	purchase, the user (and not the creator of the program,
 *	Commodore, their distributors or their retailers)
 *	assumes the entire cost of all necessary damages.  In 
 *	no event will Commodore be liable for direct, indirect,
 *	incidental or consequential damages resulting from any
 *	defect in the program even if it has been advised of the 
 *	possibility of such damages.  Some laws do not allow
 *	the exclusion or limitation of implied warranties or
 *	liabilities for incidental or consequential damages,
 *	so the above limitation or exclusion may not apply.
 *
 */

#include        "exec/types.h"
#include        "exec/nodes.h"
#include        "exec/lists.h"
#include        "exec/ports.h"
#include        "exec/tasks.h"
#include        "exec/io.h"
#include        "devices/printer.h"
#include 	"local.h"

/* OPEN THE PRINTER */
int
OpenPrinter(request)
        union printerIO *request;
        {
                return(OpenDevice("printer.device",0,request,0));
        }

/* CLOSE THE PRINTER */
	int
ClosePrinter(request)
	union printerIO *request;
	{
		CloseDevice(request);
		return(0);
	}


/* Send a NULL terminated string to the printer */
        /* Assumes printer device is open and printerMsg
         * is correctly initialized.  Watches for embedded
         * "escape-sequences" and handles them as defined.
         */

	int
PrintString(request,string)
	char *string;
        union printerIO *request;
        {
                request->ios.io_Command = CMD_WRITE;
                request->ios.io_Data = string;
                request->ios.io_Length = -1;
                        /* if -1, the printer assumes it has been given
                         * a null terminated string.
                         */
                return(DoIO(request));
        }
 
        /* Send RAW character stream to the printer directly,
         * avoid "escape-sequence" parsing by the device.
         */
        
        int
PrintRaw(request,buffer,count)
        char *buffer;           /* where is the output stream of characters */
        union printerIO *request;  /* a properly initialized request block */
        int count;              /* how many characters to output */
        {
                /* queue a printer raw write */
                request->ios.io_Command = PRD_RAWWRITE;
                request->ios.io_Data = buffer;
                request->ios.io_Length = count;
                return(DoIO(request));
        }
        int
PrintCommand(request,command, p0, p1, p2, p3)
        union printerIO *request;
        int command, p0, p1, p2, p3;    /* command and its parameters */
        {
                /* queue a printer command */
                request->iopc.io_Command = PRD_PRTCOMMAND;
                request->iopc.io_PrtCommand = command;
                request->iopc.io_Parm0 = p0;
                request->iopc.io_Parm1 = p1;
                request->iopc.io_Parm2 = p2;
                request->iopc.io_Parm3 = p3;
                return(DoIO(request));
        }
        int
DumpRPort(request,rastPort, colorMap, modes, sx,sy, sw,sh, dc,dr, s)
                union printerIO *request;
                struct RastPort *rastPort;
                struct ColorMap *colorMap;
                ULONG modes;
                UWORD sx, sy, sw, sh;
                LONG dc, dr;
                UWORD s;
        {
                request->iodrp.io_Command = PRD_DUMPRPORT;
                request->iodrp.io_RastPort = rastPort;
                request->iodrp.io_ColorMap = colorMap;
                request->iodrp.io_Modes = modes;
                request->iodrp.io_SrcX = sx;
                request->iodrp.io_SrcY = sy;
                request->iodrp.io_SrcWidth = sw;
                request->iodrp.io_SrcHeight = sh;
                request->iodrp.io_DestCols = dc;
                request->iodrp.io_DestRows = dr;
                request->iodrp.io_Special = s;
                return(DoIO(request));
        }


