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/dynroute.tcl | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 examples/dynroute.tcl (limited to 'examples/dynroute.tcl') diff --git a/examples/dynroute.tcl b/examples/dynroute.tcl new file mode 100644 index 0000000..2309ac7 --- /dev/null +++ b/examples/dynroute.tcl @@ -0,0 +1,57 @@ +package require Tclpd 0.2.1 +package require TclpdLib 0.17 + +# dynroute: dynamically route messages based on first element +# non-matching arguments are sent to last inlet +# constructor: specify the number of outlets (default: 1) +# send commands to the right inlet +# available commands: +# add route selector to output number +# remove remove previously created routing +# clear + +pd::class dynroute { + constructor { + pd::add_inlet $self list + + set @num_outlets [pd::arg 0 int] + if {$@num_outlets < 0} {set @num_outlets 2} + + for {set i 0} {$i < $@num_outlets} {incr i} { + pd::add_outlet $self list + } + + set @routing {} + } + + 0_list { + set sel [pd::arg 0 any] + set out [expr {$@num_outlets-1}] + catch {set out [dict get $@routing $sel]} + pd::outlet $self $out list $args + } + + 1_add { + set sel [pd::arg 0 any] + set out [pd::arg 1 int] + if {$out < 0 || $out >= $@num_outlets} { + pd::post "error: add: outlet number out of range" + return + } + dict set @routing $sel $out + } + + 1_remove { + set sel [pd::arg 0 any] + set out [pd::arg 1 int] + if {$out < 0 || $out >= $@num_outlets} { + pd::post "error: add: outlet number out of range" + return + } + catch {dict unset @routing $sel $out} + } + + 1_clear { + set @routing {} + } +} -- cgit v1.2.1