diff options
Diffstat (limited to 'examples/dynreceive.tcl')
-rw-r--r-- | examples/dynreceive.tcl | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/examples/dynreceive.tcl b/examples/dynreceive.tcl new file mode 100644 index 0000000..8a269f7 --- /dev/null +++ b/examples/dynreceive.tcl @@ -0,0 +1,53 @@ +package require Tclpd 0.2.1 +package require TclpdLib 0.17 + +pd::class dynreceive { + constructor { + set @sym {} + if {[pd::args] > 0} { + set @sym [pd::arg 0 symbol] + pd_bind [tclpd_get_instance_pd $self] [gensym $@sym] + } + pd::add_outlet $self + } + + destructor { + # don't forget to call pd_unbind, or sending things to a symbol + # bound to dead object will crash pd! + if {$@sym != {}} { + pd_unbind [tclpd_get_instance_pd $self] [gensym $@sym] + } + } + + 0_set { + # send [set empty( to clear the receive symbol + set s [pd::arg 0 symbol] + if {$@sym != {}} { + pd_unbind [tclpd_get_instance_pd $self] [gensym $@sym] + } + if {$s == {empty}} { + set @sym {} + } else { + set @sym $s + pd_bind [tclpd_get_instance_pd $self] [gensym $@sym] + } + } + + 0_bang { + pd::outlet $self 0 bang + } + + 0_float { + pd::outlet $self 0 float [pd::arg 0 float] + } + + 0_symbol { + pd::outlet $self 0 symbol [gensym [pd::arg 0 symbol]] + } + + 0_anything { + set sel [pd::arg 0 symbol] + set argz [lrange $args 1 end] + pd::outlet $self 0 $sel $argz + } +} |