home *** CD-ROM | disk | FTP | other *** search
- (*-------------------------------------------------------------------------*)
- (* *)
- (* Amiga Oberon Library Module: Beep Date: 02-Nov-92 *)
- (* *)
- (* © 1992 BY Fridtjof Siebert *)
- (* *)
- (*-------------------------------------------------------------------------*)
-
- MODULE Beep;
-
- IMPORT e := Exec,
- au := Audio,
- es := ExecSupport,
- sys := SYSTEM;
-
- CONST (* $DataChip+ *)
- RectTable = "\x7F\x80";
- RectTableSize = 2;
- AllocationMap = "\x01\x08\x02\x04";
-
- VAR
- AllocPort: e.MsgPortPtr;
- AllocIOB: au.IOAudio;
- AudioOpen: BOOLEAN;
-
- PROCEDURE Beep*(low: BOOLEAN);
- BEGIN
-
- AllocIOB.request.message.node.pri := -40;
- AllocIOB.request.message.replyPort := AllocPort;
- AllocIOB.data := sys.ADR(AllocationMap);
- AllocIOB.length := 4;
-
- IF (e.OpenDevice("audio.device",0,sys.ADR(AllocIOB),LONGSET{})=0) &
- (AllocIOB.request.error = 0) THEN
-
- AudioOpen := TRUE;
-
- AllocIOB.request.command := e.write;
- AllocIOB.request.flags := SHORTSET{4};
- AllocIOB.data := sys.ADR(RectTable);
- AllocIOB.length := RectTableSize;
- AllocIOB.volume := 64;
-
- IF low THEN AllocIOB.period := 6000; AllocIOB.cycles := 75;
- ELSE AllocIOB.period := 3000; AllocIOB.cycles := 150 END;
-
- es.BeginIO(sys.ADR(AllocIOB));
- IF e.WaitIO(sys.ADR(AllocIOB))=0 THEN END;
-
- AudioOpen := FALSE;
- e.CloseDevice(sys.ADR(AllocIOB));
-
- END;
-
- END Beep;
-
-
- BEGIN
-
- AudioOpen := FALSE;
- AllocPort := es.CreatePort("",0);
- IF AllocPort=NIL THEN HALT(20) END;
-
- CLOSE
-
- IF AudioOpen THEN e.CloseDevice(sys.ADR(AllocIOB)) END;
- IF AllocPort#NIL THEN es.DeletePort(AllocPort) END;
-
- END Beep.
-
-
-