<HTML>
<style> BODY { font-family:Arial, Helvetica, sans-serif;font-size:12px; }</style>Hi Alexander,<br>
<br>
<div>Pressing Ctrl+C or Ctrl+Break is an interrupt that breaks normal program flow - if unhandled, it causes an abnormal program termination and things don't get cleaned up properly, which includes calling finalization blocks.<br>
</div><div><br>
</div><div>Try doing these steps to get around it:<br>
<br>
- Include the "SysUtils" unit.  This causes the Ctrl+C signal to raise an exception which can then be trapped.<br>
- Instead of using 'finalization', wrap your main procedure with a 'try...finally' block, calling "spkoff" in the finally section.</div><div><br>
</div><div><br>
</div><div>As an extra note... if you specify the "assembler" directive after your procedure header, you don't need to use "begin...end" and can just use "asm...end" directly.</div><div><br>
</div><div>Let me know how it goes.<br>
</div><div><br>
</div><div>Gareth aka. Kit<br>
</div><br>
 <br>
<br>
<span style="font-weight: bold;">On Tue 22/01/19 09:11 , "Alexander via fpc-devel" fpc-devel@lists.freepascal.org sent:<br>
</span><blockquote style="BORDER-LEFT: #F5F5F5 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px">Hi,
<br>
<br>
I try use finalization in unit, but it not work.
<br>
<br>
When press Ctrl+C and exit program uses this unit
<br>
PC-Speaker stay infinity play on interrupted tone.
<br>
When Ctrl+C use spkoff; in finalization section not called.
<br>
<br>
Unit:
<br>
<br>
unit spkunit;
<br>
<br>
{$MODE OBJFPC}
<br>
{$ASMMODE INTEL}
<br>
{$CODEPAGE UTF8}
<br>
<br>
{
<br>
    Unit for playing melodys on PC-Speaker.
<br>
    For GNU/Linux 64 bit version. Root priveleges needed.
<br>
    Written on FreePascal.
<br>
    Copyright (C) 2019  Artyomov Alexander
<br>
<br>
    This program is free software: you can redistribute it and/or modify
<br>
    it under the terms of the GNU Affero General Public License as
<br>
    published by the Free Software Foundation, either version 3 of the
<br>
    License, or (at your option) any later version.
<br>
<br>
    This program is distributed in the hope that it will be useful,
<br>
    but WITHOUT ANY WARRANTY; without even the implied warranty of
<br>
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<br>
    GNU Affero General Public License for more details.
<br>
<br>
    You should have received a copy of the GNU Affero General Public License
<br>
    along with this program.  If not, see <<a target="_blank" href="parse.php?redirect=https://www.gnu.org/licenses/%26gt"><span style="color: red;">https://www.gnu.org/licenses/></span></a>;.
<br>
}
<br>
<br>
interface
<br>
<br>
uses X86;
<br>
<br>
procedure spk(b : word ); procedure spkon; procedure spkoff;
<br>
<br>
implementation
<br>
<br>
procedure spkon;
<br>
begin
<br>
 asm
<br>
        push    rax
<br>
        in      al, 61h
<br>
        or      al, 03h
<br>
        out     61h, al
<br>
        pop     rax
<br>
 end;
<br>
end;
<br>
procedure spkoff;
<br>
begin
<br>
 asm
<br>
        push    rax
<br>
        in      al, 61h
<br>
        or      al, 03h
<br>
        xor     al, 03h
<br>
        out     61h, al
<br>
        pop     rax
<br>
 end;
<br>
end;
<br>
procedure spk(b : word );
<br>
var hb, lb : byte;
<br>
begin; hb := hi (b); lb := lo (b);
<br>
 asm
<br>
        push    rax
<br>
        mov     al, 0B6h
<br>
        out     43h, al
<br>
        mov     al, lb
<br>
        out     42h, al
<br>
        mov     al, hb
<br>
        out     42h, al
<br>
        pop     rax
<br>
 end;
<br>
end;
<br>
<br>
initialization
<br>
<br>
fpioperm($42, 2, 1); // fpioperm($42, 1, 1); fpioperm($43, 1, 1);
<br>
fpioperm($61, 1, 1);
<br>
<br>
finalization
<br>
<br>
spkoff;
<br>
<br>
end.
<br>
<br>
_______________________________________________
<br>
fpc-devel maillist  -  <a href="javascript:top.opencompose('fpc-devel@lists.freepascal.org','','','')">fpc-devel@lists.freepascal.org</a>
<br>
<a target="_blank" href="parse.php?redirect=<a href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</a>"><span style="color: red;">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</span></a>
<br>
<br>
<br>
</blockquote></HTML>