type
    Message_t = unknown 20,

    IORequest_t = struct {
	Message_t io_Message;
	*Device_t io_Device;
	*Unit_t io_Unit;
	uint io_Command;
	ushort io_Flags;
	short io_Error;
    },

    IOStdReq_t = struct {
	IORequest_t io_io;
	ulong io_Actual;
	ulong io_Length;
	*byte io_Data;
	ulong io_Offset;
    };

long
    DEV_BEGINIO = -30,
    DEV_ABORTIO = -36;

ushort
    IOB_QUICK = 0,
    IOF_QUICK = 1 << 0;

uint
    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;

extern
    AbortIO(*IORequest_t io)ulong,
    BeginIO(*IORequest_t io)void,
    CheckIO(*IORequest_t io)*IORequest_t,
    CloseDevice(*IORequest_t io)void,
    CreateExtIO(*MsgPort_t ioReplyPort; ulong size)*IORequest_t,
    CreateStdIO(*MsgPort_t ioReplyPort)*IOStdReq_t,
    DeleteExtIO(*IORequest_t ioExt; ulong size)void,
    DeleteStdIO(*IOStdReq_t ioStdReq)void,
    DoIO(*IORequest_t io)ulong,
    OpenDevice(*char devName; ulong unitNo; *IORequest_t io; ulong flags)ulong,
    SendIO(*IORequest_t io)void,
    WaitIO(*IORequest_t io)ulong;
