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 }; 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] hTiogaVoiceMonitors.tioga Polle Zellweger (PTZ) May 22, 1987 4:11:10 pm PDT this gets called by DictationOps when a selection [possibly zero length, in which case don't delete it] is to be replaced by new voice input: the selection is assumed to be locked with GetVoiceLock and there is assumed to be no playback or recording in progress at the time of the call ------------------- called by AddVoiceProc this procedure locks the selection and fills in the TiogaOps target info above. If the selection is a voice selection then targetSoundSelection is set up. If the selection is text then a text key is placed in the text. If the selection is pending delete then the delete is done. If the selection is a voice selection then the viewer is locked [against other voice edits] called by PrepareSelection, DictationMachine, ChangeVoiceInputFocus, RecordInPlaceOfSelection creates a new dictation window and sets targetSoundSelection up correctly to refer to it, also sets addingIntoTextViewer false called by DictationMachine calls RedrawViewer ENTRY DictationMachine was bugged when a recording was in progress: create a new voice viewer and alter the recording focus to it. In the case where recording going into a voice viewer, leave a marker where the focus was. => CancelPlayBack (AbortCues now internal), to avoid a locking problem called by QueuePlayBackCue calls nothing Κ6˜™Icode™1—J™J˜#J˜šΟb&˜&J˜JšΟn œΟkœŸœ˜)šž œŸœ˜JšžœŸœŸœŸ œ˜AJ˜—Jš žœŸœŸœŸœŸœŸœ˜GKšž œŸœŸœŸœ˜$KšžœŸœŸœ˜1šžœŸœŸœŸœ(˜SK™—Kš™š žœŸœŸœŸœ ŸœŸœ˜DKšœ ž ™Jšœς™ς—šžœŸœŸ˜!Kšœ žS™]Kšœ~™~—šžœŸœŸœ˜(Kšœ ž™Kšœž œŸ™KšžœΗ™ΧK˜K˜——š(˜(K˜Kš ž œŸœŸœŸœ ŸœŸœ#˜]KšžœŸœŸœ˜;š ž œŸœŸœŸœŸœŸœ˜UKšœœž œ*™F—KšžœŸœŸœŸœ ŸœŸœŸœ˜kKšž œŸœŸœŸœ2Ÿœ+ŸœŸœŸœ>Ÿœ ˜ˆK˜šž œŸœŸœ˜7Kšœ ž™—K˜K˜šœ žœŸœŸœ/˜lšœ ŸœŸœ˜9Kšœ˜Kšœ˜—šœŸœŸœBŸœ˜bKšœ˜Kšœ˜—šœŸœŸ˜*šœ˜Kšœ˜Kšœ˜—K˜——šžœž˜$š ž œŸœŸœŸœ&Ÿœ Ÿœ˜]K™ ——K˜K˜γK˜J˜VJ˜šœ!œ˜>šœ˜JšžœŸœŸ˜JšžœŸœŸœ˜—šœ˜Jšžœ˜—šœ˜JšžœŸœŸœŸΟi1˜ZJšžœŸœŸœŸ H˜iJšžœŸœŸœŸ˜,—J˜—šœž˜7šœ˜Jšžœ˜#Jšž œ˜——J˜šœ Ÿ˜1šœ˜JšžœŸ˜JšžœŸ˜—šœ˜Jšž œŸœ˜"JšžœŸœŸœ˜&JšžœŸœ˜.—šœ˜Jšžœ˜$Jšžœ˜)šž!œŸœŸœ˜0JšœgŸœ˜o—————…— n