keep.pas

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

Код примера
 {Keep.PAS}
 
 { Пример программы для процедуры 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.

Скачать keep.pas