<<>> <> <> <> <> DIRECTORY IO USING [STREAM, UnsafeBlock], Rope USING [ROPE]; XCommunications: CEDAR DEFINITIONS <> <<--communication base for X >> <<--or >> <<--inter application shared communication base >> ~ BEGIN Error: ERROR [what: Rope.ROPE]; ProtocolData: TYPE = RECORD [ create: PROC [base: Rope.ROPE, port: REF ANY] RETURNS [StreamData] ¬ NIL, protocol: ATOM ¬ NIL, success: BOOL ¬ FALSE ]; StreamData: TYPE = RECORD [ in, out: IO.STREAM ¬ NIL, putChar: PROC [self: IO.STREAM, char: CHAR] ¬ NIL, -- IO.PutChar, unsafePutBlock: PROC [self: IO.STREAM, block: IO.UnsafeBlock] ¬ NIL, -- IO.UnsafePutBlock, getChar: PROC [self: IO.STREAM] RETURNS [CHAR] ¬ NIL, -- IO.GetChar, sendNow: PROC [self: IO.STREAM] ¬ NIL, -- IO.Flush, <<--May be a faster proc which guarantees delivery soon but without waiting >> errorFromStream: PROC [self: IO.STREAM] RETURNS [Rope.ROPE] ¬ NIL, <<--In case IO.Failure was raised>> errorMsg: Rope.ROPE ¬ NIL, success: BOOL ¬ FALSE ]; ScannedName: TYPE = RECORD [ protocol: Rope.ROPE, server: Rope.ROPE, specific: Rope.ROPE --interpretation depends on both, protocol and application ]; ScanName: PROC [name: Rope.ROPE] RETURNS [ScannedName]; <> <> GetProtocol: PROC [protocol: Rope.ROPE ¬ NIL, defaultProtocol: ATOM ¬ NIL] RETURNS [ProtocolData]; <> <> <> ScanSpecific: PROC [application: ATOM, protocol: ATOM, scannedName: ScannedName] RETURNS [base: Rope.ROPE, port: REF ANY]; <> <> <> CreateStreams: PROC [application: ATOM, name: Rope.ROPE, defaultProtocol: ATOM ¬ NIL] RETURNS [StreamData]; <> <> <> <<>> RegisterCommunication: PROC [protocolData: ProtocolData]; <> <> ScanProcType: TYPE = PROC [application: ATOM, protocol: ATOM, scannedName: ScannedName] RETURNS [base: Rope.ROPE, port: REF ANY]; RegisterScanSpecific: PROC [application: ATOM, protocol: ATOM, scan: ScanProcType]; <> <> FinishStreamData: PROC [sd: StreamData] RETURNS [StreamData]; <> END.