From 44f29524444a96d9e40a76f48750f17e2fdc2974 Mon Sep 17 00:00:00 2001 From: mescalinum Date: Sun, 2 Oct 2011 16:42:06 +0000 Subject: reorganize tree following template structure svn path=/trunk/externals/loaders/tclpd/; revision=15443 --- examples/dynreceive.tcl | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 examples/dynreceive.tcl (limited to 'examples/dynreceive.tcl') 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 + } +} -- cgit v1.2.1