{Portable Prolog Event Manager}

{Comment flags:   VAX APM EMAS}

!VAX! %include "Prolog_Interpreter:GDec.Inc"
!EMAS!%include "ECSC56.GDec#Inc"
{APM} %include "IPlog:GDec.Inc"

{APM} %include "Inc:Util.Imp"

%external %string (255) %spec Error Mes

%external %integer %spec Debug, Sk Lev
%external %INTEGER %spec PROLOG EVENT, Options
%external %INTEGER %spec CRIT, RUNNING
%external %integer %spec Input, Output

!VAX! %external %integer %spec Control C Trapped
!VAX! %external %routine %spec Can Ctrl C
!VAX! %external %routine %spec On Ctrl C (%routine R)
!VAX! %own %integer Not Just Hamish Either
!VAX! 
!VAX! {TRAP CONTROL C}
!VAX! 
!VAX! %external %routine Trap Control C
!VAX!    Control C Trapped = 1
!VAX!    On Ctrl C (Trap Control C)
!VAX! %end {Trap Control C}

%external %routine Signal Prolog Event (%integer E)
   %if Options&Trace Option # 0 %start
      Print String ("Signalling Prolog event ")
      Write (E, 0)
      Print String (" - Message is: " . Error Mes)
      New Line
   %finish

   %if Running = 0 %START
      Print String("Exiting Prolog (not yet loaded)")
      New Line
      %stop
   %finish
   %if Crit # 0 %start
      New Line
      Print String("Sorry, Prolog badly damaged inside ...")
      Print String (" will have to stop")
      New Line
      Print String ("(" . Error Mes . ")")
      New Line
      Print String ("Try running Prolog afresh")
      New Lines (2)
      %stop
   %finish

   Prolog Event = E
   %signal 13, E
%end {Signal Prolog Event}

%external %routine No Space (%string (31) In)
   Error Mes = "No Space in " . In
   Signal Prolog Event (5)
%end {No Space}

%external %integer %function Take Interrupt Action
   %integer Ch, Junk
   %switch Action ('a' : 'z')

{APM} Set Terminal Mode (0)
   New Line
   Prompt ("Interrupt Action: ")
   %cycle
      Read Symbol (Ch) %until Ch > ' '
      Read Symbol (Junk) %until Junk = NL    {skip rest of line}
      -> Action (Ch) %if 'a' <= Ch <= 'z'
   Action (*):
      Print String ("Unrecognised Command - Try H for Help")
      New Line
      %continue

   Action ('a'):     {Abort}
      %result = 1

   Action ('c'):     {Continue}
      -> Reselect

   Action ('d'):     {Debug}
      Debug = 1
      Sk Lev = 1000000
      -> Reselect

   Action ('b'):     {Break}
      %result = 2

   Action ('e'):     {Exit}
      New Line
      Print String ("[Prolog Execution Halted]")
      New Line
      %stop

   Action ('h'):
      Print String ("Valid Commands are: ");    New Line
      Print String ("   a - Abort      ")
      Print String ("   c - Continue");         New Line
      Print String ("   d - Debug      ")
      Print String ("   e - Exit");             New Line
      Print String ("   h - Help       ")
      Print String ("   b - Break");            New Line
   %repeat
Reselect:
   Select Input (Input)
   Select Output (Output)
   %result = 0
%end {Take Interupt Action}

%end %of %file
