home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / OB3.2D2.DMS / in.adf / Module / Beep.mod < prev    next >
Encoding:
Text File  |  1994-08-05  |  1.9 KB  |  73 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                                                                         *)
  3. (*  Amiga Oberon Library Module: Beep                 Date: 02-Nov-92      *)
  4. (*                                                                         *)
  5. (*   © 1992 BY Fridtjof Siebert                                            *)
  6. (*                                                                         *)
  7. (*-------------------------------------------------------------------------*)
  8.  
  9. MODULE Beep;
  10.  
  11. IMPORT e   := Exec,
  12.        au  := Audio,
  13.        es  := ExecSupport,
  14.        sys := SYSTEM;
  15.  
  16. CONST  (* $DataChip+ *)
  17.   RectTable = "\x7F\x80";
  18.   RectTableSize = 2;
  19.   AllocationMap = "\x01\x08\x02\x04";
  20.  
  21. VAR
  22.   AllocPort: e.MsgPortPtr;
  23.   AllocIOB:  au.IOAudio;
  24.   AudioOpen: BOOLEAN;
  25.  
  26. PROCEDURE Beep*(low: BOOLEAN);
  27. BEGIN
  28.  
  29.   AllocIOB.request.message.node.pri  := -40;
  30.   AllocIOB.request.message.replyPort := AllocPort;
  31.   AllocIOB.data   := sys.ADR(AllocationMap);
  32.   AllocIOB.length := 4;
  33.  
  34.   IF (e.OpenDevice("audio.device",0,sys.ADR(AllocIOB),LONGSET{})=0) &
  35.      (AllocIOB.request.error = 0) THEN
  36.  
  37.     AudioOpen := TRUE;
  38.  
  39.     AllocIOB.request.command := e.write;
  40.     AllocIOB.request.flags   := SHORTSET{4};
  41.     AllocIOB.data            := sys.ADR(RectTable);
  42.     AllocIOB.length          := RectTableSize;
  43.     AllocIOB.volume          := 64;
  44.  
  45.     IF low THEN AllocIOB.period := 6000; AllocIOB.cycles :=   75;
  46.            ELSE AllocIOB.period := 3000; AllocIOB.cycles :=  150 END;
  47.  
  48.     es.BeginIO(sys.ADR(AllocIOB));
  49.     IF e.WaitIO(sys.ADR(AllocIOB))=0 THEN END;
  50.  
  51.     AudioOpen := FALSE;
  52.     e.CloseDevice(sys.ADR(AllocIOB));
  53.  
  54.   END;
  55.  
  56. END Beep;
  57.  
  58.  
  59. BEGIN
  60.  
  61.   AudioOpen := FALSE;
  62.   AllocPort := es.CreatePort("",0);
  63.   IF AllocPort=NIL THEN HALT(20) END;
  64.  
  65. CLOSE
  66.  
  67.   IF AudioOpen     THEN e.CloseDevice(sys.ADR(AllocIOB)) END;
  68.   IF AllocPort#NIL THEN es.DeletePort(AllocPort)     END;
  69.  
  70. END Beep.
  71.  
  72.  
  73.