home *** CD-ROM | disk | FTP | other *** search
- #include <graphics/view.h>
- #include <graphics/rastport.h>
- #include <exec/memory.h>
- #include <exec/io.h>
- #include <devices/printer.h>
-
- extern long DoIO(), OpenDevice();
- extern void *AllocMem(), FreeMem();
-
- typedef union
- {
- struct IOStdReq ios;
- struct IODRPReq iodrp;
- struct IOPrtCmdReq iopc;
- } ReqBlock;
-
- #define REGS register
- #define MEMFLAGS ((long)(MEMF_PUBLIC|MEMF_CLEAR))
- #define ALLOC_SIZE ((long)sizeof(ReqBlock))
-
- /* pointers to IO request blocks */
- static ReqBlock *write_prt;
-
- /* convience */
- typedef struct MsgPort Port;
-
- /* message port, must be created before opening the device */
- static Port *ThisPort;
-
- long open_prtdev()
- {
- extern void *AllocMem(), FreeMem(), DeletePort();
- extern Port *CreatePort();
- extern long OpenDevice();
-
- if( !(ThisPort = CreatePort("pport",0L)) )
- return(1L);
-
- /* Allocate memory for IO request blocks */
- if( !(write_prt = AllocMem(ALLOC_SIZE,MEMFLAGS)) )
- return(2L);
-
- if( OpenDevice("printer.device",0L,write_prt,0L) )
- {
- FreeMem(write_prt,ALLOC_SIZE);
- return(3L);
- }
-
- write_prt->ios.io_Message.mn_ReplyPort = ThisPort;
- return(0L);
- }
-
- void close_prtdev()
- {
- CloseDevice(write_prt);
- FreeMem(write_prt,ALLOC_SIZE);
- write_prt = 0L;
- DeletePort(ThisPort);
- }
-
- long DumpRPort(rp,vp,sx,sy,sw,sh,dc,dr,s)
- REGS struct RastPort *rp;
- REGS struct ViewPort *vp;
- REGS UWORD sx,sy,sw,sh;
- REGS long dc, dr;
- REGS UWORD s;
- {
- write_prt->iodrp.io_Command = PRD_DUMPRPORT;
- write_prt->iodrp.io_RastPort = rp;
- write_prt->iodrp.io_ColorMap = vp->ColorMap;
- write_prt->iodrp.io_Modes = vp->Modes;
- write_prt->iodrp.io_SrcX = sx;
- write_prt->iodrp.io_SrcY = sy;
- write_prt->iodrp.io_SrcWidth = sw;
- write_prt->iodrp.io_SrcHeight = sh;
- write_prt->iodrp.io_DestCols = dc;
- write_prt->iodrp.io_DestRows = dr;
- write_prt->iodrp.io_Special = s;
- return(DoIO(write_prt));
- }
-