-- Rapunzel.mesa
-- Willie-Sue 13-Oct-86 13:33:17 PDT
DIRECTORY System;
Rapunzel: DEFINITIONS
= {
BindHandle: TYPE = LONG POINTER TO READONLY BindObject;
BindObject: TYPE;
Short: TYPE = CARDINAL;
Long: TYPE = LONG CARDINAL;
SeqShort: TYPE = LONG DESCRIPTOR FOR ARRAY SeqShortIndex OF Short;
SeqShortIndex: TYPE = CARDINAL;
Address: TYPE = LONG CARDINAL;
PeekShortCmd: TYPE = RECORD [address: Address];
PokeShortCmd: TYPE = RECORD [address: Address, value: Short];
OpCode: TYPE = MACHINE DEPENDENT {peekShort(0), pokeShort(1), (CARDINAL.LAST - 1)};
Cmd: TYPE = RECORD[
SELECT tag: OpCode FROM
peekShort => [peekShort: PeekShortCmd],
pokeShort => [pokeShort: PokeShortCmd],
ENDCASE];
SeqCmd: TYPE = LONG DESCRIPTOR FOR ARRAY SeqCmdIndex OF Cmd;
SeqCmdIndex: TYPE = CARDINAL;
PeekShortResult: TYPE = RECORD [value: Short];
PokeShortResult: TYPE = RECORD [];
Result: TYPE = RECORD[
SELECT tag: OpCode FROM
peekShort => [peekShort: PeekShortResult],
pokeShort => [pokeShort: PokeShortResult],
ENDCASE];
SeqResult: TYPE = LONG DESCRIPTOR FOR ARRAY SeqResultIndex OF Result;
SeqResultIndex: TYPE = CARDINAL;
Fault: ERROR [
bH: BindHandle, code: FaultCode, address: Address];
FaultCode: TYPE = MACHINE DEPENDENT {nonexistent(1), protection(2), alignmentShort(3), alignmentLong(4), (CARDINAL.LAST - 1)};
DoCmds: PROCEDURE [
bH: BindHandle, cmdSeq: LONG POINTER TO SeqCmd]
RETURNS [resultSeq: LONG POINTER TO SeqResult];
FreeDoCmdsResults: PROCEDURE[bH: BindHandle, resultSeq: LONG POINTER TO SeqResult];
PeekShort: PROCEDURE [
bH: BindHandle, address: Address]
RETURNS [result: Short];
PokeShort: PROCEDURE [
bH: BindHandle, address: Address, value: Short];
PeekSeqShort: PROCEDURE [
bH: BindHandle, address: Address, count: CARDINAL]
RETURNS [resultSeq: LONG POINTER TO SeqShort];
FreePeekSeqShortResults: PROCEDURE[bH: BindHandle, resultSeq: LONG POINTER TO SeqShort];
PokeSeqShort: PROCEDURE [
bH: BindHandle, address: Address, valueSeq: LONG POINTER TO SeqShort];
PeekLong: PROCEDURE [
bH: BindHandle, address: Address]
RETURNS [result: Long];
PokeLong: PROCEDURE [
bH: BindHandle, address: Address, value: Long];
RemoteBind: PROCEDURE [
host: System.NetworkAddress, zone: UNCOUNTED ZONE ← NIL]
RETURNS[bH: BindHandle];
RemoteUnbind: PROCEDURE[bH: BindHandle] RETURNS [nil: BindHandle];
}.