<> <> <<>> Monitors in the original TiogaVoice VoiceRecordImpl => VoiceRecordPlayImpl AddVoiceProc: PUBLIC ENTRY Menus.MenuProc RecordNewRope: PROC = { BroadcastRecordingDone: ENTRY PROC = { BROADCAST recordingDone }; ....}; IncrementRecordTimer: ENTRY PROC RETURNS [stillRunning: BOOLEAN _ TRUE] StopRecording: PUBLIC ENTRY PROC = { DictationMachine: PUBLIC ENTRY Menus.MenuProc = { RecordInPlaceOfSelection: PUBLIC ENTRY PROC [selection: VoiceViewers.Selection] = { <> <<------------------->> PrepareSelection: INTERNAL PROC RETURNS [succeeded: BOOLEAN _ FALSE] <> <> NewDictationWindow: INTERNAL PROC <> <> ChangeVoiceInputFocus: INTERNAL PROC = { <> <> <> VoicePlayBackImpl => VoiceRecordPlayImpl PlayBackNext: ENTRY PROC RETURNS [moreToDo: BOOLEAN _ TRUE, nextWakeUp: BasicTime.Pulses] = { QueuePlayBackCue: ENTRY PROC [request: PlayBackRequest] = { AbortCues: ENTRY PROC = { IF playBackState.running THEN playBackState.abort _ TRUE }; <<=> CancelPlayBack (AbortCues now internal), to avoid a locking problem>> RemoveViewerReferences: PUBLIC ENTRY PROC [viewer: ViewerClasses.Viewer] RETURNS [okay: BOOLEAN _ TRUE] = { RedrawViewer: PUBLIC ENTRY PROC [viewer: ViewerClasses.Viewer, newContents: Rope.ROPE, unchangedHead, deleteChars, insertChars: INT, timeRemnant: INT, age: BOOLEAN, selectionsAfterRedraw: VoicePlayBack.SelectionsAfterRedraw] RETURNS [newNode: TiogaOpsDefs.Ref] = { -------------------- AppendRequest: INTERNAL PROC [request: PlayBackRequest] <> Q: why isn't PlayBackMenuProc: PUBLIC Menus.MenuProc an ENTRY proc? Where is the entry proc under playback? PlayWholeSlab: PUBLIC PROC [viewer: ViewerClasses.Viewer] VoiceRope.Play QueuePlayBackCue PlaySlabSection: PUBLIC PROC [viewer: ViewerClasses.Viewer, node: TiogaOpsDefs.Ref, from, to: INT] VoiceRope.Play QueuePlayBackCue VoiceInTextImpl.PlaySelection: PUBLIC PROC PlayRopeWithoutCue VoiceRope.Play QueuePlayBackCue VoiceViewersImpl => VoiceViewersImpl GetVoiceLock: PUBLIC ENTRY PROC [info: VoiceViewers.VoiceViewerInfo] RETURNS [gotIt: BOOLEAN] <> ML problem resulting from Dan's combining VoicePlayImpl and VoiceRecordImpl into VoiceRecordPlayImpl: entry proc VoiceRecordPlayImpl.StopRecording calls VoiceViewersImpl.ReplaceSelectionWithSavedInterval which calls entry proc VoiceRecordPlayImpl.RedrawViewer (there rather than in VoiceViewersImpl to synchronize with possible playbacks in progress (?)). VoiceRecordPlayImpl.StopRecording also calls VoiceRecordPlayImpl.RedrawViewer directly Callers of VoiceViewersImpl.ReplaceSelectionWithSavedInterval: VoiceViewersImpl Delete: PUBLIC PROC Copy: PUBLIC PROC (twice) VoiceMarkersImpl AdjustSilences: Menus.MenuProc VoiceRecordPlayImpl *PrepareSelection: INTERNAL PROC RETURNS (when recording onto a pending-delete selection) *StopRecording: PUBLIC ENTRY PROC (when recording into a voice editing window -- not a dictation machine) *RecordInPlaceOfSelection: PUBLIC ENTRY PROC Callers of VoiceRecordPlayImpl.RecordInPlaceOfSelection VoiceMarkersImpl ResumeFromSelection: Menus.MenuProc ResumeFromEnd: Menus.MenuProc Callers of VoiceRecordPlayImpl.RedrawViewer ENTRY VoiceRecordPlayImpl *StopRecording ENTRY *ChangeVoiceInputFocus INTERNAL VoiceMarkersImpl AddCharMark: PUBLIC Menus.MenuProc LockedAddCharMark: PUBLIC PROC [viewer DeleteCharMarks: PUBLIC Menus.MenuProc (twice) VoiceViewersImpl RedrawViewerMenuProc: Menus.MenuProc ChangeColumnEvent: ViewerEvents.EventProc ReplaceSelectionWithSavedInterval: PUBLIC PROC [ selection: TiogaVoicePrivate.Selection, soundInterval: TiogaVoicePrivate.SoundInterval, leaveSelected: BOOLEAN]