Windows.Beep.Mod 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. (* Aos, Copyright 2001, Pieter Muller, ETH Zurich *)
  2. MODULE Beep; (** AUTHOR "pjm"; PURPOSE "PC speaker driver"; *)
  3. IMPORT Kernel32, Kernel(* , KernelLog*) ;
  4. CONST
  5. (** Sound the PC speaker continuously at the specified frequency. Use 0 to switch off the sound. Not sharable. *)
  6. TYPE
  7. Beeper = OBJECT
  8. VAR hz: WORD;
  9. beep: BOOLEAN;
  10. PROCEDURE & Init*;
  11. BEGIN
  12. (*KernelLog.String("Beep:Beeper.Init"); KernelLog.Ln;*)
  13. beep := FALSE;
  14. END Init;
  15. PROCEDURE On( hz: WORD );
  16. BEGIN {EXCLUSIVE}
  17. SELF.hz := hz; beep := TRUE;
  18. END On;
  19. PROCEDURE Off;
  20. BEGIN {EXCLUSIVE}
  21. beep := FALSE;
  22. END Off;
  23. PROCEDURE Beep;
  24. VAR retBOOL: Kernel32.BOOL; (* Dan 09.11.05 *)
  25. BEGIN
  26. (*KernelLog.String("Beeper.Beep"); KernelLog.Ln; *)
  27. LOOP
  28. WHILE (beep) DO retBOOL :=Kernel32.Beep( hz, 50 ); END;
  29. BEGIN {EXCLUSIVE}
  30. AWAIT( beep );
  31. END;
  32. END;
  33. END Beep;
  34. BEGIN {ACTIVE}
  35. (*KernelLog.String("Beep:Beeper.Active"); KernelLog.Ln; *) Beep();
  36. END Beeper;
  37. VAR
  38. beep: Beeper;
  39. PROCEDURE Beep*( hz: WORD );
  40. VAR s: SET;
  41. BEGIN
  42. IF (hz # 0) THEN
  43. IF beep = NIL THEN NEW( beep ) END;
  44. beep.On( hz )
  45. ELSE
  46. IF beep # NIL THEN beep.Off(); END;
  47. END;
  48. END Beep;
  49. PROCEDURE Test*;
  50. VAR timer: Kernel.Timer;
  51. BEGIN
  52. NEW(timer);
  53. Beep( 2000 ); timer.Sleep(1000); Beep(0);
  54. END Test;
  55. PROCEDURE TestOn*;
  56. BEGIN
  57. Beep( 2000 );
  58. END TestOn;
  59. PROCEDURE TestOff*;
  60. BEGIN
  61. Beep( 0 );
  62. END TestOff;
  63. END Beep.
  64. System.Free Beep ~
  65. Beep.TimerTest
  66. Beep.Test
  67. Beep.TestOn
  68. Beep.TestOff
  69. ~