MODULE Escapes ;

IMPORT Handler   ;
IMPORT DecodeArg ;
IMPORT Debug ;
IMPORT Program;
IMPORT Store;
FROM SYSTEM IMPORT TKCALL,ADR,ADDRESS;
FROM TKCalls IMPORT TKcli,TKnewl;
FROM String IMPORT LengthC;
FROM Handler IMPORT UsersEnvironment,TypeCode, DeclareConditionHandler;
FROM Debug IMPORT WriteS , WriteI ;
FROM IO IMPORT FindOutput , SelectOutput, XFindOutput, XSWriteByte ;

VAR ticks : CARDINAL;
VAR eventcount :CARDINAL;
VAR result : INTEGER;
(* ------------------------------------------------------------------------- *)
PROCEDURE JohnsConditionhandler(    t :TypeCode;
                           i : INTEGER ;
                      VAR E1 : UsersEnvironment;
                      VAR E2 : UsersEnvironment) : INTEGER ;
VAR junk :INTEGER;

BEGIN
  Debug.WriteS( "*N---CONDITION---*N " ) ;

  Debug.WriteS( "*NTYPE CODE = " ) ;

  Debug.WriteHex( t,8) ;
  Debug.WriteS( " ERROR CODE= " ) ;
  Debug.WriteHex( i,8) ;

  Debug.WriteS( "*N pc= " ) ;
  Debug.WriteHex( E2.PC,8) ;
  Debug.WriteS( " Mod=" ) ;
  Debug.WriteHex( E2.Mod,8) ;
  Debug.WriteS( "*N" ) ;

  Debug.WriteS( " VALIDITY=" ) ;
  Debug.WriteHex( E2.Validity,8) ;
  Debug.WriteS( "*N" ) ;

  Debug.WriteS( "*NSP1=" ) ;
  Debug.WriteHex( E2.SP1,8) ;
  Debug.WriteS( "*N" ) ;
(*signal so return*)
  Debug.WriteS( "*N---END CONDITION---*N " ) ;

  RETURN 1
END JohnsConditionhandler ;
(* ------------------------------------------------------------------------- *)
PROCEDURE JohnsEventhandler(    code   : INTEGER;
                                data1  : INTEGER ;
                                data2  : INTEGER ;
                                handle : INTEGER ;
                                VAR E  : UsersEnvironment) ;
BEGIN
  Debug.WriteS( "*N johnies event handler> " ) ;

  Debug.WriteS( "data1" ) ;
  Debug.WriteHex( data1,2) ;
  Debug.WriteS( "*N" ) ;

  Debug.WriteS( "data2" ) ;
  Debug.WriteHex( data2,2) ;
  Debug.WriteS( "*N" ) ;

END JohnsEventhandler ;
(* ------------------------------------------------------------------------- *)
PROCEDURE OTHEREventhandler(    code   : INTEGER;
                                data1  : INTEGER ;
                                data2  : INTEGER ;
                                handle : INTEGER ;
                                VAR E  : UsersEnvironment) ;
BEGIN
 IF code = 4 THEN
  ticks := ticks + CARDINAL(data1) ;
 END;
 IF code = 2 THEN
  eventcount := eventcount + 1;
 END;
END OTHEREventhandler ;

(* ------------------------------------------------------------------------- *)
PROCEDURE Check (This:INTEGER ) :BOOLEAN;
   BEGIN
      IF ( This < 0 ) AND ( result = 0 ) THEN
         result := This ;
      END (* if *) ;
      RETURN This >= 0 ;
   END Check ;

(* ------------------------------------------------------------------------- *)

VAR
   Handle                  : DecodeArg.DecodedInformation ;
   OldValue                : BOOLEAN ;
   Div                     : BOOLEAN ;
   thestate                : BOOLEAN ;
   count                   : CARDINAL;
   thetime                 : CARDINAL;
   repeatcount             : CARDINAL;
   Left                    : INTEGER ;
   Right                   : INTEGER ;
   Number                  : INTEGER ;
   Length                  : CARDINAL;
   Identity                : BOOLEAN ;
   junk                    : INTEGER ;
   runLength                  : CARDINAL;
   runstring               : ARRAY [ 0.. 80] OF CHAR ;
   KeyString               : ARRAY [ 0..40 ] OF CHAR ;
   ArgumentString          : ARRAY [ 0..80 ] OF CHAR;
   SPValue                 : CARDINAL ;
   Output                  : CARDINAL;
BEGIN
      Debug.WriteS( "*NDeclareConditionHandler" ) ;

   result := DeclareConditionHandler(JohnsConditionhandler);
      Debug.WriteS( "*NRETURN from DeclareConditionHandler" ) ;
 
   result := 0;
   Length := Program.Arguments ( ArgumentString);
   KeyString := "time/C[10],repeat/C[10],test/S" ;
   IF Check( DecodeArg.DecodeInit( Handle , KeyString , ArgumentString ) ) AND
      Check( DecodeArg.GetCardinalArg( thetime , "time" , 1 ,Handle ) ) AND
      Check( DecodeArg.GetCardinalArg( repeatcount , "repeat" ,1, Handle ))AND
      Check( DecodeArg.GetStateArg( thestate,"test",Handle ) ) THEN
      Debug.WriteS( "NewER Test*N" ) ;
      ticks := 0;
      eventcount :=0;


      LOOP
      END;
 
      IF Check( DecodeArg.DecodeEnd( Handle ) ) THEN
      END;
   END;
   Program.Stop (result) ;

END Escapes.
