207c
<< <> >>
: PREPARE ( -- )
   0                            \ Longest segment
   #MOTORS                      \ Per motor:
   0 DO   I THERE @  I WHERE @
          2DUP <
          DUP 2* 1+  I STEP !   \ 1 of -1, direction
          IF  SWAP  THEN -
          DUP I USAGE !         \ Distance
          MAX                   \ Largest distance?
     LOOP
   DUP TO #SEGMENTS
   2/ #MOTORS
   0 DO   DUP I TANK !          \ Tanks half full
     LOOP DROP ;

\ To use on-screen without hardware
: >MOTOR ( new-position motor# -- ) 2DROP ;

\ To put motor information on screen
: .HERE ( -- ) CR #MOTORS 0 DO I WHERE @ 4 .R  LOOP SPACE ;

: SEGMENT ( - )
   #MOTORS
   0 DO   I TANK @  I USAGE @
          2DUP <                        \ Fuel shortage?
          IF   #SEGMENTS -              \ Refuel
               I STEP @ I WHERE +!      \ New motor position
               I WHERE @ I >MOTOR       \ P-L-O-P
          THEN
          - I TANK !
     LOOP ;

: GOTO ( -- ) \ The target should be fixed already.
   PREPARE
   #SEGMENTS
   0 ?DO  .HERE SEGMENT
          KEY? IF KEY DROP LEAVE THEN
          WAIT MS
     LOOP .HERE ;

: DOIT ( targetpositions -- ) TARGET GOTO ;
>>