aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormescalinum <mescalinum@users.sourceforge.net>2009-09-15 13:17:26 +0000
committermescalinum <mescalinum@users.sourceforge.net>2009-09-15 13:17:26 +0000
commitfb18dbb202dd8876debad2c9351300723625b2bc (patch)
treed379df42cfa7857ba3d65ccb30c1f40586f54b2f
parentd5d82cfec3885d22d9d46a4c9c1fe929a6c6bdaf (diff)
add some utility functions
svn path=/trunk/externals/tclpd/; revision=12346
-rw-r--r--pdlib.tcl40
1 files changed, 38 insertions, 2 deletions
diff --git a/pdlib.tcl b/pdlib.tcl
index e2cd347..164aa09 100644
--- a/pdlib.tcl
+++ b/pdlib.tcl
@@ -116,12 +116,13 @@ namespace eval ::pd {
# class level dispatcher (sort of class constructor)
proc ::$classname {self args} "
if \$::verbose {::pd::post \[info level 0\]}
- ::${classname}_constructor \$self {*}\$args
- # object dispatcher
+ # define object dispatcher:
proc ::\$self {inlet selector args} \"
if \\\$::verbose {::pd::post \\\[info level 0\\\]}
::pd::call_classmethod $classname \$self \\\$inlet \\\$selector {*}\\\$args
\"
+ # call constructor:
+ ::${classname}_constructor \$self {*}\$args
return \$self
"
@@ -201,6 +202,41 @@ namespace eval ::pd {
}
}
+ proc strip_selectors {pdlist} {
+ set r {}
+ foreach atom $pdlist {
+ if {[llength $atom] != 2} {
+ return -code error "Malformed pd list!"
+ }
+ lappend r [lindex $atom 1]
+ }
+ return $r
+ }
+
+ proc add_selectors {tcllist} {
+ set r {}
+ foreach i $tcllist {
+ lappend r [list [lindex {float symbol} [catch {expr $i}]] $i]
+ }
+ return $r
+ }
+
+ proc strip_empty {tcllist} {
+ set r {}
+ foreach i $tcllist {
+ if {$i == "empty"} {lappend r {}} {lappend r $i}
+ }
+ return $r
+ }
+
+ proc add_empty {tcllist} {
+ set r {}
+ foreach i $tcllist {
+ if {$i == {}} {lappend r "empty"} {lappend r $i}
+ }
+ return $r
+ }
+
# mechanism for uploading procs to gui interp, without the hassle of escaping [encoder]
proc guiproc {name argz body} {
# upload the decoder