The program simulates a very simple speedometer, and the MzTake script monitors it.
highway/highway.ss
(module highway mzscheme (let loop ([speed 0]) (sleep 1) ;; Generate some fake speeds readings: (loop (+ speed 4))))
highway/highway-mztake.ss
(require (lib "animation.ss" "frtime")) (define-mztake-process radar-program ("highway.ss" [values-of-speed 3 4 bind 'speed])) (printf-b "current speed: ~a" (hold values-of-speed)) (printf-b "last ten speeds: ~a" (history-b 10 values-of-speed)) (map-e (lambda (a-speed) (when (>= a-speed 55) (pause radar-program))) values-of-speed) (define (make-speed-gauge speed) (let ([center (make-posn 200 200)]) (list (make-circle center 170 "black") (make-circle center 160 "white") (make-rect (make-posn 0 202) 1000 1000 "white") (make-line (make-posn 30 201) (make-posn 370 201) "black") (make-line center (posn+ center (make-posn (- (* 150 (cos (/ speed 30)))) (- (* 150 (sin (/ speed 30)))))) "red")))) (display-shapes (make-speed-gauge (hold values-of-speed))) (start/resume radar-program)