
	{ These are the structures and functions you'll need to
	  do use the Exec IO facility. }

{$I "Include/Ports.i"}

const
    IOOpenFail  = -1;
    IOAborted   = -2;
    IONoCmd     = -3;
    IOBadLength = -4;

    IOQuick     = 1;

    CMD_INVALID = 0;
    CMD_RESET   = 1;
    CMD_READ    = 2;
    CMD_WRITE   = 3;
    CMD_UPDATE  = 4;
    CMD_CLEAR   = 5;
    CMD_STOP    = 6;
    CMD_START   = 7;
    CMD_FLUSH   = 8;

    CMD_NONSTD  = 9;

type
    IORequest = record
	ioMessage : Message;
	ioDevice  : Address;
	ioUnit    : Address;
	ioCommand : Short;
	ioFlags   : Byte;
	ioError   : Byte;
    end;
    IORequestPtr = ^IORequest;

    IOStdReq = record
	ioReq     : IORequest;
	ioActual  : Integer;
	ioLength  : Integer;
	ioData    : String;
	ioOffset  : Integer;
    end;
    IOStdReqPtr = ^IOStdReq;

Procedure AbortIO(i : IORequestPtr);
    External;
Procedure AddDevice(d : Address);
    External;
Function CheckIO(i : IORequestPtr): IORequestPtr;
    External;
Procedure CloseDevice(i : IORequestPtr);
    External;
Function DoIO(i : IORequestPtr): Integer;
    External;
Function OpenDevice(s : String; u : Integer;
			i : IORequestPtr; f : Integer) : Integer;
    External;
Procedure SendIO(i : IORequestPtr);
    External;
Function WaitIO(i : IORequestPtr): Integer;
    External;

