' nop TO 'PreMixTick
gregory.fth		\ call marker to clear previous upload
marker gregory.fth	\ and make a new marker again


0 VALUE OnFlag   \ -- ) set if Lights are ON
12 VALUE  LightTriggerInterval	\ 12 seconds wait on holding ON
12 VALUE  LightTrigger2Interval \ 12 seconds wait on holding ON
0 VALUE  LastLight2Trigger  \ --) trigger value
0 VALUE  LastLightTrigger  \ --) trigger value
0 VALUE currand   \ --) random value


: Rand ( -- i ) \ random value in range 0 - 65535, no native random function.
     currand 1664525 * 1013904223 + DUP TO currand
     $FE42 w@ + ClockTime @ +
    	DUP wswap xor $FFFF and
;


: Darkness ( -- )

1 IdToEngineNr	\ -- engine valid? ) locate layer A
	IF			\ -- engine ) if it exists,
		1 6 EnGo	\  result go to 1.6 in layer A
		DROP		\ ignore failures
		ELSE
	DROP		\ -- ) ignore invalid engine
	THEN
;


: SwitchOne ( -- )
	
   1 GetInput				\ -- val )
		
	10 <		\ trigger threshold value on input 1
	IF			\ -- ) if so,
	
	ClockTime CELL+ @		\ -- time ) current time
   	LastLightTrigger -		\ -- delta ) time since last trigger
   	LightTriggerInterval U< 0=	\ -- flag ) 
   		IF                  \ -- if 1 second has passed
		12 TO LightTriggerInterval        \ -- if on) run thru cues 12 secs
				ClockTime CELL+ @  TO LastLightTrigger
		Rand 
			DUP .
			15728 <        \ -- this is 24 percent
			IF
			1 IdToEngineNr	\ -- engine valid? ) locate layer A
				IF			\ -- engine ) if it exists,
				1 1 EnGo	\  result go to X.1 in layer A
				1 TO OnFlag
				DROP		\ ignore failures
			ELSE
			DROP		\ -- ) ignore invalid engine
	 	THEN
		THEN
		THEN

ELSE
	1 TO LightTriggerInterval   \ -- ) allow immediate
new presses
	OnFlag
	1 =
	IF   \ -- ) test for if lights are on using your
switch
 		Darkness   \ -- ) turn darkness cue on if released
		0 TO OnFlag
	THEN
	THEN
;


: SwitchTwo ( -- )
	
   5 GetInput				\ -- val )
		
	10 <		\ triggering threshold
	IF			\ -- ) if so,
	
	ClockTime CELL+ @		\ -- time ) current time
   	LastLight2Trigger -		\ -- delta ) time since last
trigger
   	LightTrigger2Interval U< 0=	\ -- flag ) 
   		IF                  \ -- if 1 second has passed
		12 TO LightTrigger2Interval        \ -- if on, run
thru cues 12 secs)
				ClockTime CELL+ @  TO LastLight2Trigger
		Rand 
			DUP .
			15727 >        \ -- this is 76 percent
			IF
			1 IdToEngineNr	\ -- engine valid? ) locate layer A
				IF			\ -- engine ) if it exists,
				1 1 EnGo	\  result go to X.1 in layer A
				2 TO OnFlag    \ -- ) flag for 2nd switch ON
				DROP		\ ignore failures
			ELSE
			DROP		\ -- ) ignore invalid engine
	 	THEN
		THEN
		THEN
ELSE
	1 TO LightTrigger2Interval   \ -- ) allow immediate
new presses
	OnFlag
	2 =
	IF   \ -- ) test for if lights are on using number 2
switch
 		Darkness   \ -- ) turn darkness cue on if released
		0 TO OnFlag
	THEN
THEN
;

: BothSwitches  ( -- )
SwitchOne 
SwitchTwo
;

' BothSwitches TO 'PreMixTick	
	
		  
For more questions about using forth on the lanbox, contact the very helpful matthijs at lanbox.com

back