DIRECTORY AudioLibrary, Commander, IO, VoiceUtils ; AudioLibraryImpl: CEDAR MONITOR IMPORTS Commander, VoiceUtils EXPORTS AudioLibrary ~ { AudioInfo: TYPE ~ AudioLibrary.AudioInfo; AudioInfoBody: TYPE ~ AudioLibrary.AudioInfoBody; ErrCode: TYPE ~ AudioLibrary.ErrCode; FD: TYPE ~ AudioLibrary.FD; IPAddress: TYPE ~ AudioLibrary.IPAddress; IPPort: TYPE ~ AudioLibrary.IPPort; MixerID: TYPE ~ AudioLibrary.MixerID; portOffset: NAT ¬ BYTES[WORD]-BYTES[IPPort]; -- assumes big-endian, though. noisy: BOOL¬FALSE; AudioGetInfo: PUBLIC PROC [fd: FD] RETURNS [err: ErrCode, info: AudioInfo] ~ { info ¬ NEW[AudioInfoBody ¬ []]; err ¬ AuGeIn[fd, info]; IF noisy AND err#success THEN VoiceUtils.ReportFR["GetInfo returned %g", NIL, NIL, Ival[err]]; }; AuGeIn: PROC [fd: FD, info: AudioInfo] RETURNS [err: ErrCode] ~ TRUSTED MACHINE CODE { "audio_getinfo" }; AudioSetInfo: PUBLIC PROC [fd: FD, info: AudioInfo, returnCurrentValue: BOOL¬FALSE] RETURNS [err: ErrCode, newInfo: AudioInfo] ~ { newInfo ¬ NEW[AudioLibrary.AudioInfoBody ¬ info­]; err ¬ AuSeIn[fd, newInfo, returnCurrentValue]; IF noisy AND err#success THEN VoiceUtils.ReportFR["SetInfo returned %g", NIL, NIL, Ival[err]]; }; AuSeIn: PROC [fd: FD, info: AudioInfo, rCV: BOOL] RETURNS [err: ErrCode] ~ TRUSTED MACHINE CODE { "audio_setinfo" }; MixerLinkStream: PUBLIC PROC [mixerID: MixerID, fd: FD] RETURNS [err: ErrCode] ~ { err ¬ MiLiSt[mixerID, fd]; IF noisy AND err#success THEN VoiceUtils.ReportFR["MixerLinkStream returned %g", NIL, NIL, Ival[err]]; }; MiLiSt: PROC [mixerID: MixerID, fd: FD] RETURNS [err: ErrCode] ~ TRUSTED MACHINE CODE { "mixer_linkstream" }; MixerUnlinkStream: PUBLIC PROC [fd: FD] RETURNS [err: ErrCode] ~ { err ¬ MiUnSt[fd]; IF noisy AND err#success THEN VoiceUtils.ReportFR["MixerUnlinkStream returned %g", NIL, NIL, Ival[err]]; }; MiUnSt: PROC [fd: FD] RETURNS [err: ErrCode] ~ TRUSTED MACHINE CODE { "mixer_unlinkstream" }; TransmitStreamCreate: PUBLIC PROC [ groupAddr: IPAddress, groupPort: IPPort, packetLen: INT, voxEnable: BOOL] RETURNS [fd: FD] ~ { wPort: WORD ¬ LOOPHOLE[groupPort]; i: INT; fd ¬ TrStCr[groupAddr, wPort, packetLen, voxEnable]; IF noisy AND (i¬LOOPHOLE[fd, INT])<0 THEN VoiceUtils.ReportFR["Xmit Create returned %g", NIL, NIL, [integer[i]]]; }; TrStCr: PROC [ groupAddr: IPAddress, groupPort: WORD, packetLen: INT, voxEnable: BOOL] RETURNS [fd: FD] ~ TRUSTED MACHINE CODE { "xmitstream_create" }; ReceiveStreamCreate: PUBLIC PROC [ groupAddr: IPAddress, groupPort: IPPort, remoteAddr: IPAddress, remotePort: IPPort, jitterDelay: INT] RETURNS [fd: FD] ~ { wgPort: WORD ¬ LOOPHOLE[groupPort]; wrPort: WORD ¬ LOOPHOLE[remotePort]; i: INT; fd ¬ ReStCr[groupAddr, wgPort, remoteAddr, wrPort, jitterDelay]; IF noisy AND (i¬LOOPHOLE[fd, INT])<0 THEN VoiceUtils.ReportFR["Rcv Create returned %g", NIL, NIL, [integer[i]]]; }; ReStCr: PROC [ groupAddr: IPAddress, groupPort: WORD, remoteAddr: IPAddress, remotePort: WORD, jitterDelay: INT] RETURNS [fd: FD] ~ TRUSTED MACHINE CODE { "recvstream_create" }; StreamDestroy: PUBLIC PROC [fd: FD] RETURNS [err: ErrCode] ~ { err ¬ StDe[fd]; IF noisy AND err#success THEN VoiceUtils.ReportFR["StreamDestroy returned %g", NIL, NIL, Ival[err]]; }; StDe: PROC [fd: FD] RETURNS [err: ErrCode] ~ TRUSTED MACHINE CODE { "stream_destroy" }; StreamGetLocalAddr: PUBLIC PROC [fd: FD] RETURNS [err: ErrCode, localAddr: IPAddress, localPort: IPPort] ~ TRUSTED { wPort: WORD; err ¬ StGeLoAd[fd, @localAddr, @wPort]; IF noisy AND err#success THEN VoiceUtils.ReportFR["StreamGetLcl returned %g", NIL, NIL, Ival[err]]; localPort ¬ LOOPHOLE[wPort]; }; StGeLoAd: PROC [ fd: FD, localAddrP: POINTER TO IPAddress, localPortP: POINTER TO WORD] RETURNS [err: ErrCode] ~ TRUSTED MACHINE CODE { "stream_getlcladdr" }; StreamSetGroupAddr: PUBLIC PROC [fd: FD, groupAddr: IPAddress, groupPort: IPPort] RETURNS [err: ErrCode] ~ { wPort: WORD ¬ LOOPHOLE[groupPort]; err ¬ StSeGrAd[fd, groupAddr, wPort]; IF noisy AND err#success THEN VoiceUtils.ReportFR["StreamSetGrp returned %g", NIL, NIL, Ival[err]]; }; StSeGrAd: PROC [fd: FD, groupAddr: IPAddress, groupPort: WORD] RETURNS [err: ErrCode] ~ TRUSTED MACHINE CODE { "stream_setgrpaddr" }; StreamSetRemoteAddr: PUBLIC PROC [fd: FD, remoteAddr: IPAddress, remotePort: IPPort] RETURNS [err: ErrCode] ~ { wPort: WORD ¬ LOOPHOLE[remotePort]; err ¬ StSeReAd[fd, remoteAddr, wPort]; IF noisy AND err#success THEN VoiceUtils.ReportFR["StreamSetRemote returned %g", NIL, NIL, Ival[err]]; }; StSeReAd: PROC [fd: FD, remoteAddr: IPAddress, remotePort: WORD] RETURNS [err: ErrCode] ~ TRUSTED MACHINE CODE { "stream_setremaddr" }; Ival: PROC[err: ErrCode] RETURNS [IO.Value] ~ { RETURN[[integer[LOOPHOLE[err]]]]; }; NoisyOn: Commander.CommandProc~{ noisy ¬ TRUE; }; NoisyOff: Commander.CommandProc~{ noisy ¬ FALSE; }; Commander.Register["AudioLibNoisyOn", NoisyOn]; Commander.Register["AudioLibNoisyOff", NoisyOff]; }. Ž AudioLibraryImpl.mesa Copyright Σ 1992 by Xerox Corporation. All rights reserved. Swinehart, October 19, 1992 2:40 pm PDT Types Glue Κ€–(cedarcode) style•NewlineDelimiter ™code™Kšœ Οeœ1™K˜Kš žœžœ žœ2žœžœœ ˜dK˜K˜šŸœžœžœžœ˜,Kšžœžœžœ˜*K˜——šŸœž œžœ˜(Kšžœ;žœ˜KKšœžœ˜ K˜'Kš žœžœ žœ1žœžœœ ˜cKšœ žœ˜K˜K˜šŸœžœ˜Kš œžœžœžœžœžœžœ˜FKšžœžœžœžœ˜F—K˜—šŸœž œžœ*˜QKšžœžœ˜Kšœžœžœ ˜"K˜%Kš žœžœ žœ1žœžœœ ˜cK˜K˜šŸœžœžœ#žœ˜>Kšžœžœžœžœ˜FK˜——šŸœž œžœ,˜TKšžœ˜Kšœžœžœ ˜#K˜&Kš žœžœ žœ4žœžœœ ˜fK˜K˜šŸœžœžœ%žœ˜@Kšžœžœžœžœ˜FK˜——Kš Ÿœžœžœžœ žœ žœ ˜TK˜KšŸœ"žœ˜1KšŸœ"žœ˜3K˜K˜/K˜1—K˜—K˜K˜—…— R