%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