DIRECTORY IO, Jukebox USING [CloseTune, CreateTune, Error, FindJukebox, Handle, OpenJukebox, Tune], Lark, LarkTest, PrincOpsUtils USING [IsBound], PupSocket USING [Destroy, GetLocalAddress], Rope USING [ROPE], VoiceStream USING [AddPiece, Close, Open, SetSocket, wholeTune]; LarkTestVFSImpl: CEDAR MONITOR IMPORTS IO, Jukebox, PrincOpsUtils, PupSocket, VoiceStream EXPORTS LarkTest = BEGIN jukeOpen: BOOL _ FALSE; jukebox: Jukebox.Handle _ NIL; InitializeJukeBox: PROCEDURE = TRUSTED { jukeboxName: Rope.ROPE = "Test.Jukebox"; haveJuke: BOOL _ TRUE; IF NOT PrincOpsUtils.IsBound[LOOPHOLE[Jukebox.FindJukebox]] THEN RETURN; IF (jukebox _Jukebox.FindJukebox[jukeboxName]) = NIL THEN { jukebox _ Jukebox.OpenJukebox[jukeboxName ! Jukebox.Error => { CONTINUE; }]; }; jukeOpen _ jukebox # NIL; }; OpenVFS: PUBLIC LarkTest.BProc = TRUSTED { }; CloseVFS: PUBLIC LarkTest.BProc = TRUSTED { IF NOT jukeOpen THEN RETURN; IF self.stream#NIL THEN VoiceStream.Close[self.stream]; self.stream _ NIL; IF self.socket#NIL THEN PupSocket.Destroy[self.socket]; self.socket _ NIL; }; SetInterval: ENTRY PROC[ self: LarkTest.LarkHandle, utterance: INT, record: BOOL, queueIt: BOOLEAN, nBytes: INT _ VoiceStream.wholeTune] RETURNS [actualUtterance: INT] = TRUSTED { ENABLE UNWIND=>NULL; tune: Jukebox.Tune; IF NOT jukeOpen THEN RETURN; IF utterance = -1 THEN IF record THEN { tune _ Jukebox.CreateTune[jukebox, -1]; utterance _ tune.tuneId; Jukebox.CloseTune[jukebox, tune]; } ELSE RETURN; VoiceStream.AddPiece[ handle: self.stream, tuneId: utterance, firstByte: 0, nBytes: nBytes, create: record, playback: NOT record, keyIndex: 0, flush: NOT queueIt ]; RETURN[utterance]; }; Playback: PUBLIC LarkTest.PlaybackProc = { [] _ SetInterval[ self: self, utterance: message, record: FALSE, queueIt: queue ]; }; Record: PUBLIC LarkTest.RecordProc = { message _ SetInterval[ self: self, utterance: -1, record: TRUE, queueIt: FALSE, nBytes: seconds * 8000 ]; }; END. `LarkTestVFSImpl.mesa Copyright c 1984, 1986 by Xerox Corporation. All rights reserved. Last edit: L. Stewart, January 3, 1984 11:09 am Last Edited by: Swinehart, June 6, 1986 8:24:49 am PDT Initialize anything that has to be set up on the VFS side. IF NOT jukeOpen THEN InitializeJukeBox[]; IF NOT jukeOpen THEN RETURN; self.out.PutF["VFS Connect[[%b, %b]\n", IO.int[self.rx1.remoteSocket.net], IO.int[self.rx1.remoteSocket.host]]; self.socket _ PupSocket.CreateEphemeral[ local: self.rx1.remoteSocket.socket, remote: self.rx1.localSocket, getTimeout: 100]; self.tx3 _ NEW[Lark.ConnectionSpecRec]; self.tx3.protocol _ Lark.Protocol[interactive]; self.tx3.encoding _ Lark.Encoding[muLaw]; self.tx3.blankA _ 0; self.tx3.blankB _ 0; self.tx3.blankC _ 0; self.tx3.buffer _ in1; self.tx3.keyIndex _ 0; self.tx3.localSocket _ self.rx1.localSocket; self.tx3.remoteSocket _ self.socket.GetLocalAddress[]; self.stream _ VoiceStream.Open[jukebox]; VoiceStream.SetSocket[socket: self.socket, handle: self.stream]; Swinehart, May 16, 1986 11:47:06 am PDT Cedar 6.1 changes to: DIRECTORY, LarkTestVFSImpl, OpenVFS, CloseVFS Κ™˜Jšœ™šœ Οmœ7™BJšœ/™/J™6—J˜šΟk ˜ Jšžœ˜JšœžœH˜UJ˜J˜ Jšœžœ ˜Jšœ žœ˜+Jšœžœžœ˜Jšœ žœ/˜@—J˜šœžœž˜Jšžœžœ0˜:Jšžœ ˜Jšœž˜Jšœ žœžœ˜J˜J˜šΟnœž œžœ˜(Jšœžœ˜(Jšœ:™:Jšœ žœžœ˜Jš žœžœžœžœžœ˜Hšžœ9˜;Jšœ?žœ˜LJ˜—Jšœ˜J˜—J˜šœ žœžœ˜*Jšžœžœ žœ™)Jšžœžœ žœžœ™Jšœ(žœ!žœ"™o™(Jšœ$™$Jšœ™Jšœ™—Jšœ žœ™'Jšœ/™/Jšœ)™)Jšœ™Jšœ™Jšœ™Jšœ™Jšœ™Jšœ,™,Jšœ6™6Jšœ(™(Jšœ@™@J˜—J˜šœ žœžœ˜+Jšžœžœ žœžœ˜Jšžœ žœžœ ˜7Jšœžœ˜Jšžœ žœžœ ˜7Jšœžœ˜J˜—J˜šŸ œžœžœ(žœ žœ žœ žœžœžœžœ˜³Jšžœžœžœ˜J˜Jšžœžœ žœžœ˜šžœž˜šžœžœ˜J˜'J˜J˜!J˜—Jšžœžœ˜ —šœ˜Jšœ˜J˜J˜ Jšœ˜J˜Jšœ žœ˜Jšœ ˜ Jšœžœ ˜—Jšžœ ˜J˜—J˜šœ žœ˜*Jšœ:žœ˜RJ˜—J˜šœžœ˜&Jšœ:žœ žœ˜iJ˜—J˜—Jšžœ˜code™'K™ Kšœ Οr-™9—K™—…—œ•