<> <> <> DIRECTORY Rope USING [ROPE], Pup USING [Address]; EFTP: CEDAR DEFINITIONS = { Handle: TYPE = REF Object; Object: TYPE; Milliseconds: TYPE = INT; <<>> <> CreateSender: PROC [him: Pup.Address, waitForAck: BOOL _ TRUE] RETURNS [Handle]; CreateReceiver: PROC [me: Pup.Address] RETURNS [Handle]; GetHisAddress: PROC [Handle] RETURNS [Pup.Address]; Abort: PROC [Handle, Rope.ROPE]; Finish: PROC [Handle]; <> SetSendTimeout: PROC [handle: Handle, milliseconds: Milliseconds, tries: NAT]; PutBlock: PROC [Handle, REF TEXT]; <> <> SetRecvTimeout: PROC [handle: Handle, milliseconds: Milliseconds]; GetBlock: PROC [Handle, REF TEXT]; < EOF.>> <> BlockTooBig: ERROR; InvalidCallSequence: ERROR; -- User error Timeout: SIGNAL; -- RESUME to keep trying Trouble: ERROR [code: AbortCode, err: Rope.ROPE]; AbortCode: TYPE = MACHINE DEPENDENT { ok(0), -- pseudo code externalSenderAbort(1), externalReceiverAbort(2), receiverBusyAbort(3), outOfSyncAbort(4), rejected(1001) -- pseudo code }; }.