[Lazarus] Beep?

Carlos E. R. robin.listas at telefonica.net
Thu Mar 29 12:12:48 CEST 2018


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



On Monday, 2018-03-26 at 06:09 +0200, Carlos E. R. via Lazarus wrote:

> On 2018-03-26 04:02, Donald Ziesig via Lazarus wrote:
>> Hi Everyone!
>>
>> I am using Lazarus 1.8 on Linux Mint.  I would like to use the
>> Windows.Beep( Freq, Duration) function, or (if not available)
>> SysUtils.Beep subprograms.
>
> AFAIK, you can not call Windows functions in Linux.

Further, my understanding is that the loudspeaker is associated to the 
terminal in Linux. You can not thus beep from a daemon, something that 
would be useful. We apparently do not get access to program the chip as in 
MsDOS, nor freq,duration.


Here I post an attempt I did back on 2005. It doesn't compile, and this 
moment I can't check why. Nor, of course, do I remember what I was trying.

program beeper;

uses linux;

var
         Saved43, Saved61: byte;
         LoadClock: word;
         frequency: word;
         duration:  real;
         RequestedDuration, RemainingDuration: timespec;

         hh,mm,ss, msec, usec: word;
begin
(*
         if paramcount <> 2 then begin
                 writeln('Produces a beep of the indicated frequency and 
duration.');
                 writeln('Usage: beeper frequency duration');
                 halt(1);
         end;


         frequency:= round(ParamStr(1));
         duration:= ParamStr(2);
*)

         frequency:= 500;
         duration:=  1.2;


         RequestedDuration.tv_sec:=      trunc(duration);
         RequestedDuration.tv_nsec:=     trunc(frac(duration)*1e9);

         {ioperm(from, num, value)}
         writeln($61, '   ', $42);
         writeln(ioperm($61, 1, 1), ' ', ioperm($42, 2, 1));

                 {timer prepare}
         ReadPort($43, Saved43);
         writeln('43h', ' ', Saved43);
         writeport($43, byte($B6));      {Channel 2, LSB/MSB}

         LoadClock:= 1193180 div frequency;
         writeport($42, Lo(LoadClock));
         writeport($42, Hi(LoadClock));

         ReadPort($61, Saved61);
         writeln('61h', ' ', Saved61);
         writeport($61, byte(Saved61 or $3));    {Speaker on}


                 {Select(0, nil, nil, nil, 1000);}
         gettime(hh,mm,ss, msec, usec);
         writeln(hh,':', mm, ':', ss, '.', msec, ' ', usec);
         nanosleep(RequestedDuration, RemainingDuration);
         gettime(hh,mm,ss, msec, usec);
         writeln(hh,':', mm, ':', ss, '.', msec, ' ', usec);

         writeport($61, Saved61);        {Speaker off}

end.


I also have copies of some c code I got from fidonet posts that I can look 
at another day, in assembler. I don't remember if they worked, probably 
not.


- -- 
Cheers,
        Carlos E. R.
        (from openSUSE 42.3 x86_64 "Malachite" at Telcontar)

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iEYEARECAAYFAlq8vCgACgkQtTMYHG2NR9W0MQCfW3PJfWFopnrWMV9V+bCcA1ZQ
2goAn3C6b2V2kwsunTiqB5o1vIQIaF8H
=v6dw
-----END PGP SIGNATURE-----


More information about the Lazarus mailing list