(define set-level (lambda (fix level) (cond [(list? fix) (for-each (lambda (q) (set-level q level)) fix)] [(symbol? fix) (set-intensity (find-fixture fixtures fix) level)] [else (set-intensity fix level)]))) (define find-fixture (lambda (fixtures name) (cond [(null? fixtures) #f] [(eq? (fixture-name (car fixtures)) name) (car fixtures)] [else (find-fixture (cdr fixtures) name)]))) (define find-fixture-class (lambda (fixture-classes name) (cond [(null? fixture-classes) #f] [(string-ci=? (fixture-class-name (car fixture-classes)) name) (car fixture-classes)] [else (find-fixture-class (cdr fixture-classes) name)]))) (define patch-many (lambda (fixcls prefix n universe start-addr) (define f (lambda (i) (patch-fixture (symbol-append prefix (string->symbol (number->string i))) fixcls universe (+ start-addr (- i 1))) (if (< i n) (f (+ i 1))))) (if fixcls (f 1) (display "Fixture class not available\n")))) (define at (lambda (fixname level) (cons fixname (cons 'intensity level)))) (define show-state-absolute (lambda (state) (set-level fixtures 0) (for-each (lambda (q) (set-level (car q) (cddr q))) state))) (patch-many (find-fixture-class fixture-class-library "Robe Robin DL7S Profile Mode 1") 'mh 4 0 51) (patch-many (find-fixture-class fixture-class-library "Generic dimmer") 'dim 6 0 1) (define home (list (at 'mh1 0) (at 'mh2 0) (at 'mh3 (+ 30 30)) (at 'mh4 0) (at 'dim1 0) (at 'dim2 0))) (show-state-absolute home)