diff options
author | Thomas White <taw@physics.org> | 2022-11-12 11:13:53 +0100 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2022-11-12 11:37:03 +0100 |
commit | 5a02170f9e1952cd335b6b097e8ce33de7bb35b1 (patch) | |
tree | ca21feda4181e444e10e11ce863cc017c69461e7 /guile/starlet/fixture-library/stairville/octagon-theater-cw-ww.scm | |
parent | f99311300912814ccaf4fdd6b3c753d1206e024c (diff) |
Introduce new type for attribute names
There's a serious problem with the design so far, where symbols are used
for attribute names (intensity, strobe, colour etc), and also for
attribute values (on, off, random etc). There's no way for 'at' to
tell the difference between the two. For example, this form is
ambiguous: (at myfixture 'strobe 'on)
This commit introduces a new class, <starlet-attribute>, to replace the
use of symbols here. The attributes are enumerated in (starlet attributes),
and new ones can be added later. The attribute objects remember their
'canonical' names, to allow states to be printed.
Apart from solving the ambiguity problem, this has two further
advantages. First, attribute names no longer need to be quoted
everywhere. Second, multiple names can be used to refer to the same
attribute. For example: (define color colour).
Diffstat (limited to 'guile/starlet/fixture-library/stairville/octagon-theater-cw-ww.scm')
-rw-r--r-- | guile/starlet/fixture-library/stairville/octagon-theater-cw-ww.scm | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/guile/starlet/fixture-library/stairville/octagon-theater-cw-ww.scm b/guile/starlet/fixture-library/stairville/octagon-theater-cw-ww.scm index cbabe1e..b3320b2 100644 --- a/guile/starlet/fixture-library/stairville/octagon-theater-cw-ww.scm +++ b/guile/starlet/fixture-library/stairville/octagon-theater-cw-ww.scm @@ -21,6 +21,7 @@ (define-module (starlet fixture-library stairville octagon-theater-cw-ww) #:use-module (starlet scanout) #:use-module (starlet fixture) + #:use-module (starlet attributes) #:use-module (starlet utils) #:export (<stairville-octagon-theater-cw-ww>)) @@ -29,22 +30,22 @@ <stairville-octagon-theater-cw-ww> (fixture-attributes - (attr-continuous 'intensity '(0 100) 0) - (attr-continuous 'colour-temperature '(2800 6400) 3200) - (attr-list 'strobe '(#f #t) #f) + (attr-continuous intensity '(0 100) 0) + (attr-continuous colour-temperature '(2800 6400) 3200) + (attr-list strobe '(#f #t) #f) ;; FIXME: Strobe frequency is not stated in manual. ;; I've assumed that "slow" means 1 Hz, "fast" 25 Hz - (attr-continuous 'strobe-frequency '(1 25) 1)) + (attr-continuous strobe-frequency '(1 25) 1)) - (let ((coltemp (get-attr 'colour-temperature))) + (let ((coltemp (get-attr colour-temperature))) (set-chan8 1 (scale-and-clamp-to-range coltemp '(2800 6400) '(0 255))) (set-chan8 2 (scale-and-clamp-to-range coltemp '(2800 6400) '(255 0)))) - (if (get-attr 'strobe) + (if (get-attr strobe) (set-chan8 3 (scale-and-clamp-to-range - (get-attr 'strobe-frequency) + (get-attr strobe-frequency) '(1 25) '(16 255))) (set-chan8 3 0)) (set-chan8 3 0) ;; Strobe (set-chan8 4 0) ;; Mode (0-15 = direct control) - (set-chan8 5 (percent->dmxval8 (get-attr 'intensity)))) + (set-chan8 5 (percent->dmxval8 (get-attr intensity)))) |