home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 18
/
amigaformatcd18.iso
/
-readerstuff-
/
steve_boxall
/
ezprinter.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-07-18
|
2KB
|
111 lines
/*
** EZPrinter.c
** Version 1.00 By The Reaper
**
** These little routines have been written to make it easier for you to
** use the printer device in your C programs without needing to worry about
** all the allocs/opens needed.
**
** This was based on the RKRM example source but made to look a bit nicer
** and Dice 3.01 compatible.
**
** Functions:
**
** int open_printer(void)
** Open the printer device and setup msg ports etc. Returns 0 on success
**
** void close_printer(void)
** Should be called even if open_printer fails as it frees all
** succesfull allocs made by open_printer()
**
** void init_printer(void)
** Sends the init code to the printer
**
** void send_text(char *text)
** Sends the string text to the printer. Note: Uses DoIO()
**
** void queue_write(char *text)
** Same as send_text but uses SendIO() instead. Note: Don't forget to
** wait for it to return! You can make an Abort gadget by calling
** AbortIO() for the queued write.
*/
#define Prototype extern
#include <exec/types.h>
#include <devices/printer.h>
#include <devices/prtbase.h>
#include <clib/exec_protos.h>
/* Unions */
union printerIO
{
struct IOStdReq ios;
struct IODRPReq iodrp;
struct IOPrtCmdReq iopc;
};
/* Globals */
struct MsgPort *printMsgPort;
union printerIO *pio;
/* Prototypes */
Prototype int open_printer(void);
Prototype void close_printer(void);
Prototype void init_printer(void);
Prototype void send_text(char *text);
Prototype void queue_write(char *text);
int open_printer(void)
{
if(printMsgPort = CreatePort(0L,0L))
{
if(pio = (union printerIO *)CreateExtIO(printMsgPort,sizeof(union printerIO)))
{
if(!(OpenDevice("printer.device",0L,(struct IORequest *)pio,0L)))
{
return(0L);
}
else return(3L);
}
else return(2L);
}
else return(1L);
}
void close_printer(void)
{
if(pio)
{
CloseDevice((struct IORequest *)pio);
DeleteExtIO((struct IORequest *)pio);
}
if(printMsgPort)
{
DeletePort(printMsgPort);
}
}
void init_printer(void)
{
pio->ios.io_Command = CMD_WRITE;
pio->ios.io_Data = "\033#1";
pio->ios.io_Length = -1L;
DoIO((struct IORequest *)pio);
}
void send_text(char *text)
{
pio->ios.io_Command = CMD_WRITE;
pio->ios.io_Data = text;
pio->ios.io_Length = -1L;
DoIO((struct IORequest *)pio);
}
void queue_write(char *text)
{
pio->ios.io_Command = CMD_WRITE;
pio->ios.io_Data = text;
pio->ios.io_Length = -1L;
SendIO((struct IORequest *)pio);
}