Процедура Keep

Модуль DOS

Keep (или Terminate Stay Resident - выйти и остаться резидентом) завершает программу и оставляет ее в памяти.

Объявление:

Procedure Keep(ExitCode : Word);

Режим:

Real, Protected

Замечание:

Вся программа остается в памяти, включая сегмент данных, сегмент стека и кучу, так что убедитесь, что вы задали максимальный размер кучи, с использованием директивы компилятора $M.

Параметр ExitCode соответствует параметру, передаваемому в стандартную процедуру Halt.

Ограничения:

Используйте с осторожностью! Резидентные программы (TSR) достаточно сложны, и никакой другой поддержки для них нет. Смотри техническую документацию по DOS для более подробной информации.

Пример:

{ Пример программы для процедуры Keep }

{ В данном примере используются процедуры GetIntVec и SetIntVec }
{ Посмотрите их описание и пример программы ! }

{$M $800, 0, 0 }   { 2кб стек, без кучи }

{ Эта программа включает встроенный динамик
  на короткое время каждый раз, при нажатии клавиши }

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.