DEFINITION MODULE Parallel;
(* 1-Sep-96/Stefan Tiemann for Cyclone *)
(* Converted from C-Include: parallel.h 36.1 (10.5.90), Includes Release 40.15 *)
(* parallel.device I/O request structure information *)

(*$ Implementation- *)

IMPORT ED: ExecD;

TYPE
 IOPArray= RECORD
  pTermArray0: LONGCARD;
  pTermArray1: LONGCARD;
 END;

 ParFlags= (pf0,
            eofMode,  (* EOF mode enabled bit *)
            ackMode,  (*	ACK interrupt handshake bit *)
            fastMode, (* fast I/O mode selected bit *)
            slowMode, (* slow printer bit *)
            shared	  (* non-exclusive access bit *)
           );
 ParFlagSet= SET OF ParFlags;
CONST
 radBoogie= fastMode;  (* for backward compatibility *)

TYPE
 Status= (parBusy,	   (*	 "     printer in busy toggle bit *)
     	  paperOut,	   (*	 "     paper out bit *)
          parSel,	   (* printer selected on the A1000 *)
               	   (* printer selected & serial "Ring Indicator"
				      on the A500 & A2000.  Be careful when
				      making cables *)
          rwDir,	   (* IO_STATUS read=0,write=1 bit *)
          active,	   (* rqst-qued-or-current bit *)
          abort,       (* rqst-aborted bit *)
          queued       (* rqst-queued bit *)
         );
 StatusSet= SET OF Status;

(******************************************************************)
(* CAUTION !!  IF YOU ACCESS the parallel.device, you MUST (!!!!) use
   an IOExtPar-sized structure or you may overlay innocent memory !! *)
(******************************************************************)

 IOExtPar= RECORD
  ioPar: ED.IOStdReq;
(*     STRUCT	MsgNode
*   0	APTR	 Succ
*   4	APTR	 Pred
*   8	UBYTE	 Type
*   9	UBYTE	 Pri
*   A	APTR	 Name
*   E	APTR	 ReplyPort
*  12	UWORD	 MNLength
*     STRUCT   IOExt
*  14	APTR	 io_Device
*  18	APTR	 io_Unit
*  1C	UWORD	 io_Command
*  1E	UBYTE	 io_Flags
*  1F	UBYTE	 io_Error
*     STRUCT   IOStdExt
*  20	ULONG	 io_Actual
*  24	ULONG	 io_Length
*  28	APTR	 io_Data
*  2C	ULONG	 io_Offset
*  30 *)
	pExtFlags : LONGCARD;	 (* (not used) flag extension area *)
	status: StatusSet;  	 (* status of parallel port and registers *)
	parFlags: ParFlagSet;	 (* see PARFLAGS bit definitions above *)
	pTermArry: IOPArray;      (* termination character array *)
 END;
 IOExtParPtr= POINTER TO IOExtPar;

CONST
 parallelName=	"parallel.device";

 query= ED.nonstd;
 setParams= ED.nonstd+1;

TYPE
 ParErr= (pe0, devBusy, bufTooBig, invParam, lineErr,
          notOpen, portReset, initErr);

 // Compatibilty with M2Amiga
 IOParallel= IOExtPar;
 IOParallelPtr= IOExtParPtr;
END Parallel.

