Hi Alexander, 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.
Try doing these steps to get around it: - Include the "SysUtils" unit. This causes the Ctrl+C signal to raise an exception which can then be trapped. - Instead of using 'finalization', wrap your main procedure with a 'try...finally' block, calling "spkoff" in the finally section. 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. Let me know how it goes. Gareth aka. Kit On Tue 22/01/19 09:11 , "Alexander via fpc-devel" fpc-devel@lists.freepascal.org sent: Hi, I try use finalization in unit, but it not work. When press Ctrl+C and exit program uses this unit PC-Speaker stay infinity play on interrupted tone. When Ctrl+C use spkoff; in finalization section not called. Unit: unit spkunit; {$MODE OBJFPC} {$ASMMODE INTEL} {$CODEPAGE UTF8} { Unit for playing melodys on PC-Speaker. For GNU/Linux 64 bit version. Root priveleges needed. Written on FreePascal. Copyright (C) 2019 Artyomov Alexander This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see [1];. } interface uses X86; procedure spk(b : word ); procedure spkon; procedure spkoff; implementation procedure spkon; begin asm push rax in al, 61h or al, 03h out 61h, al pop rax end; end; procedure spkoff; begin asm push rax in al, 61h or al, 03h xor al, 03h out 61h, al pop rax end; end; procedure spk(b : word ); var hb, lb : byte; begin; hb := hi (b); lb := lo (b); asm push rax mov al, 0B6h out 43h, al mov al, lb out 42h, al mov al, hb out 42h, al pop rax end; end; initialization fpioperm($42, 2, 1); // fpioperm($42, 1, 1); fpioperm($43, 1, 1); fpioperm($61, 1, 1); finalization spkoff; end. _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel [2]">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel Links: ------ [1] http://secureweb.fast.net.uk/parse.php?redirect=https://www.gnu.org/licenses/%26gt [2] http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel