%option "-nocheck-nodiag-low-nostack-nonstandard"

%include "MOUSE:MOUSE.INC"

@16_FEC000 %writeonly %integer A lights
@16_FE4000 %writeonly %integer B lights

%externalroutinespec FS insert(%string(31) name, %integer value)
%externalpredicatespec FS lookup(%string(31) name, %integername value)


! Shadows & initialisation

%ownintegername A, B
%owninteger initialised = 0

%routine initialise
   %owninteger real A = 0,  real B = 0
   %integer i
      %if FS lookup("LIGHTS_A", i) %start
         A == integer(i)
      %else
         FS insert("LIGHTS_A", addr(real A))
         A == real A
      %finish
      %if FS lookup("LIGHTS_B", i) %start
         B == integer(i)
      %else
         FS insert("LIGHTS_B", addr(real B))
         B == real B
      %finish
      initialised = 1
%end

%owninteger i


! A lights

%externalroutine lights set A(%integer what)
   initialise %if initialised = 0
!! i = or to SR(16_0300);  ! Disc interrupts off
   A = what
   A lights = A
!! i = set SR(i);  ! Safe again
%end

%externalroutine lights and A(%integer what)
   initialise %if initialised = 0
!! i = or to SR(16_0300);  ! Disc interrupts off
   A = A & what
   A lights = A
!! i = set SR(i);  ! Safe again
%end

%externalroutine lights or A(%integer what)
   initialise %if initialised = 0
!! i = or to SR(16_0300);  ! Disc interrupts off
   A = A ! what
   A lights = A
!! i = set SR(i);  ! Safe again
%end

%externalroutine lights xor A(%integer what)
   initialise %if initialised = 0
!! i = or to SR(16_0300);  ! Disc interrupts off
   A = A !! what
   A lights = A
!! i = set SR(i);  ! Safe again
%end


! B lights

%externalroutine lights set B(%integer what)
   initialise %if initialised = 0
!! i = or to SR(16_0300);  ! Disc interrupts off
   B = what
   B lights = B
!! i = set SR(i);  ! Safe again
%end

%externalroutine lights and B(%integer what)
   initialise %if initialised = 0
!! i = or to SR(16_0300);  ! Disc interrupts off
   B = B & what
   B lights = B
!! i = set SR(i);  ! Safe again
%end

%externalroutine lights or B(%integer what)
   initialise %if initialised = 0
!! i = or to SR(16_0300);  ! Disc interrupts off
   B = B ! what
   B lights = B
!! i = set SR(i);  ! Safe again
%end

%externalroutine lights xor B(%integer what)
   initialise %if initialised = 0
!! i = or to SR(16_0300);  ! Disc interrupts off
   B = B !! what
   B lights = B
!! i = set SR(i);  ! Safe again
%end

%end %of %file
