(*$M 8192, 0, 8192 *) (*$F+*)

Program SE_CLICK;
Uses
  CRT, DOS;

(*
 *  15.01.1994: Creation TL
 *  12.10.2003: 
 *
 *  1) Compiler avec TPC, executer hors environnement TURBO
 *
 *  2) Lancer le programme et evaluer l'occupation m‚moire centrale avec
 *     la commande MEMMAP 
 *
 *  3) Relancer le programme et re-evaluer la MC
 *     Combien de fois peut-on lancer le programme ?
 *     Faire EXIT autant de fois que necessaire...
 *
 *  4) Changer la ligne $M 8192, 0, 8192 en $M 8192, 0, 32768
 *
 *  5) Recommencer l'evaluation de la MC
 *
 *  Q)  Que se passera-t-il si la ligne SetIntVec($9,Addr(KbdIntVec_Old))
 *      n'est pas appelee en fin de programme ?
 *)

Var KbdIntVec_Old :PROCEDURE;

(*-----*)

Var BB, WW :Byte; 
    KbdHead : Word absolute $40 : $1A;
    KbdTail : Word absolute $40 : $1C;

PROCEDURE KeyCLICK; INTERRUPT;
Begin
  BB:=PORT[ $60 ];

  { Un clic lorsqu'une touche est frapp‚e }
  If BB < 128 Then Begin
    Sound(5000); Delay(10); Nosound;
  End;

  inline($9C);   { PUSHF -- empile les indicateurs }
  KbdIntVec_Old; { Appel … l'ancien ISR utilis‚ par le vecteur sauvegard‚ }
End;   (* KeyCLICK *)

(*-----*)

Var CH :Char;  KK:Integer;

Begin  (* Debut *)
  GetIntVec($9, @KbdIntVec_Old);
  SetIntVec($9, Addr(Keyclick));

  Swapvectors;
  EXEC(GetENV('COMSPEC'), '');
  Swapvectors;

  SetIntVec($9,Addr(KbdIntVec_Old));
  WriteLN; WriteLN('    Bye Bye');
End.   (* SE_CLICK *)
