Язык:
Русский
English
Keep (процедура) (модуль Dos)
Keep (или Terminate Stay Resident - выйти и остаться резидентом) завершает программу и оставляет ее в памяти.
Объявление
Procedure Keep(ExitCode : Word);
Режим
Real, Protected
Замечания
Вся программа остается в памяти, включая сегмент данных, сегмент стека и кучу, так что убедитесь, что вы задали максимальный размер кучи, с использованием директивы компилятора $M. Параметр ExitCode соответствует параметру, передаваемому в стандартную процедуру Halt.
Ограничения
Используйте с осторожностью! Резидентные программы (TSR) достаточно сложны, и никакой другой поддержки для них нет. Смотри техническую документацию по DOS для более подробной информации.
Смотри также
Пример
Язык:
Русский
English
{Keep.PAS}
{ Пример программы для процедуры Keep }
{ В данном примере используются процедуры GetIntVec и SetIntVec }
{ Посмотрите их описание и пример программы ! }
{ Эта программа включает встроенный динамик
на короткое время каждый раз, при нажатии клавиши }
uses Crt, Dos;
var
KbdIntVec : procedure;
{$F+} { Включаем дальний (FAR) тип вызова }
procedure KeyClick; Interrupt;
begin
{ Порт $60 - порт клавиатуры (также $64 ) }
if Port[$60] < $80 then
{ Щёлкаем при нажатии клавиши }
begin
Sound(5000);
Delay(1);
NoSound;
end;
InLine($9C); { PUSHF -- запоминаем флаги в стеке }
{ Теперь нужно вернуть событие клавиатуры в цепь обработки. }
{ Вызываем старый ISR с использованием сохранённого вектора }
KbdIntVec;
end;
{$F-}
begin
{ Устанавливаем новый обработчик событий клавиатуры }
{ $9 - прерывание клавиатуры }
GetIntVec($9, @KbdIntVec);
{ Переназначаем стандартный обработчик на нашу процедуру }
SetIntVec($9, Addr(KeyClick));
{ Оставляем программу в памяти }
Keep(0);
end.