<> <> <> <> DIRECTORY IO, Rope; Protocols: CEDAR DEFINITIONS = { ROPE: TYPE = Rope.ROPE; Protocol: TYPE = REF ProtocolRep; ProtocolRep: TYPE = RECORD [ name: ROPE, Instantiate: PROC [client: Client, logFileName: ROPE _ NIL] RETURNS [c: Conversant], StartConnect: PROC [c: Conversant, serverName: ROPE, login: BOOL _ FALSE], StartDisconnect: PROC [c: Conversant, verbosely: BOOL _ TRUE], GiveUp: PROC [c: Conversant, verbosely: BOOL _ TRUE], <> SetOnLine: PROC [c: Conversant, onLine: BOOL], protocolData: REF ANY _ NIL ]; Client: TYPE = REF ClientPrivate; ClientPrivate: TYPE = RECORD [ fromClient, toClient: IO.STREAM, type: ClientType, clientData: REF ANY _ NIL ]; ClientType: TYPE = REF ClientTypePrivate; ClientTypePrivate: TYPE = RECORD [ NoteState: PROC [c: Conversant] _ NIL, typeData: REF ANY _ NIL ]; Conversant: TYPE = REF ConversantPrivate; ConversantPrivate: TYPE = RECORD [ protocol: Protocol, client: Client, state: State _ [FALSE, disconnected], serverName: ROPE _ NIL, driver: IO.STREAM _ NIL, conversantData: REF ANY _ NIL ]; State: TYPE = RECORD [ onLine: BOOL, connectivity: Connectivity ]; Connectivity: TYPE = {disconnected, connecting, connected, disconnecting}; GetProtocol: PROC [name: ROPE] RETURNS [p: Protocol]; RegProtocol: PROC [p: Protocol]; EnumerateProtocols: PROC [PROC [Protocol]]; }.