(*$M 8192, 0, 9182 *)

Program SE_BREAK;
Uses CRT, DOS;
(*
 *  15.01.1994: Creation TL
 *  12.10.2003: Ajout variable TstBreak
 *
 *  Compiler avec TPC, executer hors environnement TURBO
 *  1)  tel quel
 *  2)  sans la ligne SetIntVec($1B, Addr(GestionBREAK));
 *  3)  puis sans I/O (write + KeyPressed)
 *  4)  remetre SetIntVec
 *)

Var
  SV_Break : Pointer;
  TstBreak : Boolean;

Procedure AFF_TIME;
  Var HR, MN, SS, CC :Word;
  
  FUNCTION LZ(WW :Word) : STRING;
    Var SW :STRING;
  Begin
    Str(WW:0, SW); If Length(SW) = 1 THEN LZ:='0'+SW Else LZ:=SW;
  End;
Begin
  GetTime(HR,MN,SS,CC); Write(LZ(HR),':', LZ(MN),':',LZ(SS),'.', LZ(CC));
End;   (* AFF_TIME *)

(*$F+*) Procedure GestionBREAK; INTERRUPT;
  Var CH : Char;
Begin
  Write('*** Interruption par CTRL+PAUSE ***',Chr(7));
  TstBreak:=TRUE;
End; (*$F-*)   (* GestionBREAK *)

Procedure PROLOGUE;
Begin
  WriteLN; AFF_TIME; WriteLN(' : D‚but d''execution');
End;   (* PROLOGUE *)

Var Tst_ESC :Boolean;

Begin  (* Debut *)
  GetIntVec($1B, SV_Break);
  SetIntVec($1B, Addr(GestionBREAK));  (* (2) *)

  PROLOGUE; TstBreak:=FALSE; Tst_ESC:=FALSE;
  
  Repeat
    Delay(500);
    Write('.');
    If KeyPressed Then If ReadKEY = Chr(27) Then Tst_ESC:=TRUE;
  Until Tst_ESC OR TstBreak;

  if ( Tst_ESC ) Then Begin
    Write('*** Sortie Normale par ESCAPE ***');
  End;
  SetIntVec($1B, SV_Break);
End.  (* SE_BREAK *)
