<> <> DIRECTORY BasicTime USING [ GMT ], RPC USING [ EncryptionKey ], Thrush USING [ CallUrgency, ConversationHandle, ConvEventBody, EncryptionKey, EventSequence, IntervalSpec, NB, newTune, nullConvHandle, nullHandle, PartyHandle, Reason, ROPE, SHHH, SmartsHandle, StateInConv, ThHandle, Tune, VoiceInterval ], ThSmartsRpcControl ; FinchSmarts: CEDAR DEFINITIONS = { <> <<>> ConversationHandle: TYPE = Thrush.ConversationHandle; nullConvHandle: Thrush.ConversationHandle = Thrush.nullConvHandle; NB: TYPE = Thrush.NB; nullHandle: Thrush.ThHandle = Thrush.nullHandle; Orig: TYPE = { unknown, us, them }; PartyHandle: TYPE = Thrush.PartyHandle; Reason: TYPE = Thrush.Reason; ROPE: TYPE = Thrush.ROPE; SHHH: TYPE = Thrush.SHHH; FinchInfo: TYPE = REF FinchInfoBody; FinchInfoBody: TYPE = MONITORED RECORD [ smartsID: Thrush.SmartsHandle_Thrush.nullHandle, partyID: Thrush.PartyHandle _ Thrush.nullHandle, shh: SHHH_NIL, conversations: ConvDesc_NIL, currentConvID: ConversationHandle _ nullConvHandle, thProcess: PROCESS_NIL, thAction: CONDITION, apprise: BOOL_FALSE, bluejayConnection: BOOL_FALSE, myName: ThSmartsRpcControl.InterfaceName _ [], myRName: ROPE _ NIL, myPassword: RPC.EncryptionKey _ NULL, serverInstanceName: ROPE _ NIL, serverInstance: ROPE_NIL, <> ReportSystemState: PROC[ on: BOOL ], ReportConversationState: PROC[ nb: NB, cDesc: ConvDesc, remark: ROPE_NIL ] ]; ConvDesc: TYPE = REF ConvDescBody; ConvDescBody: TYPE = RECORD [ <> cState: Thrush.ConvEventBody, -- amalgam of useful info from reported events desiredState: Thrush.StateInConv_any, -- what we're aiming for desiredPartyID: PartyHandle_NULL, desiredReason: Reason_wontSay, desiredComment: ROPE_NIL, desiredInterval: Thrush.IntervalSpec_NIL, desiredKey: Thrush.EncryptionKey_NULL, currentRecordIntervalSpec: Thrush.IntervalSpec _ NIL, newIntervals: LIST OF Thrush.IntervalSpec _ NIL, iTail: LIST OF Thrush.IntervalSpec _ NIL, newEvent, newSpec, newKeys, newAddress: BOOL _FALSE, signallingStarted: BOOL_FALSE, descValid: BOOL_FALSE, desireKey: BOOL_FALSE, <> clientData: REF _ NIL, -- only known use: FinchTool uses to store Viewer pointer next, prev: ConvDesc_NIL, otherPartyID: PartyHandle _ nullHandle, otherPartyDesc: ROPE_ NIL, startTime: BasicTime.GMT_NULL, originator: Orig _ unknown, conference: BOOL_FALSE, completed: BOOL_FALSE, failed: BOOL_FALSE ]; <<>> <> InitFinchSmarts: PROC [ ReportSystemState: PROC[ on: BOOL ], <> ReportConversationState: PROC[ nb: NB, cDesc: ConvDesc, remark: ROPE_NIL ] <> ]; <> <> FinchIsRunning: PROC RETURNS [finchIsRunning: BOOL]; UninitFinchSmarts: PROC[problem: BOOL_FALSE]; <> PlaceCall: PROC [ convID: Thrush.ConversationHandle _ Thrush.nullConvHandle, rName: ROPE_NIL, number: ROPE_NIL, urgency: Thrush.CallUrgency_normal, useNumber: BOOL_FALSE]; <> <> <> <> <> <> <> AnswerCall: PROC[convID: Thrush.ConversationHandle]; DisconnectCall: PROC[ convID: Thrush.ConversationHandle, reason: Thrush.Reason_terminating, comment: ROPE_NIL ]; GetHistory: PROC[ convID: Thrush.ConversationHandle, toState: INT_0 -- i.e., all-- ] RETURNS [ s: Thrush.EventSequence ]; GetRname: PROC[partyID: Thrush.PartyHandle] RETURNS [ rName: ROPE]; <> RecordReason: TYPE = { ok, abandoned, failed, hopeless }; <> <> <> <> RecordTune: PROC[ <> useTune: Thrush.Tune_Thrush.newTune, useInterval: Thrush.VoiceInterval_[] ] RETURNS[ reason: RecordReason, -- << wouldn't need if only "ok" and "failed/hopeless" are supported.>> tune: Thrush.Tune, interval: Thrush.VoiceInterval_NULL, key: Thrush.EncryptionKey_NULL ]; <> <> StopTune: PROC[ <> reason: RecordReason_ok -- other valid value: abandon (recording only: supported?) ]; <> PlaybackTune: PROC [ <> tune: Thrush.Tune, interval: Thrush.VoiceInterval_[], key: Thrush.EncryptionKey, queueIt: BOOL_FALSE ]; <> GetConvDesc: PROC[convID: ConversationHandle] RETURNS [cDesc: ConvDesc]; DequeueInterval: PROC[cDesc: ConvDesc] RETURNS [ int: Thrush.IntervalSpec_NIL ]; }. <<>> <<>>