aboutsummaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'extensions')
-rw-r--r--extensions/gui/ix/osc.tcl43
1 files changed, 43 insertions, 0 deletions
diff --git a/extensions/gui/ix/osc.tcl b/extensions/gui/ix/osc.tcl
new file mode 100644
index 00000000..e5830ec4
--- /dev/null
+++ b/extensions/gui/ix/osc.tcl
@@ -0,0 +1,43 @@
+#OSC tcl 2005 ix
+package require udp
+namespace eval osc {
+ proc encode {type data} {
+ switch $type {
+ i {set format I }
+ f {set format R }
+ s {set len [string length $data]
+ set format a[expr $len + 4 - $len % 4]}
+ }
+ return [binary format $format $data]
+ }
+ proc message {args} {
+ set path [encode s [lindex $args 0]]
+ set typetags ","
+ set body ""
+ foreach arg [lrange $args 1 end] {
+ if [string is integer $arg] {
+ set type i
+ } elseif [string is double $arg] {
+ set type f
+ } else {
+ set type s
+ }
+ append typetags $type
+ append body [encode $type $arg]
+ }
+ set typetags [encode s $typetags]
+ return $path$typetags$body
+ }
+ proc connect {host port} {
+ set s [udp_open]
+ fconfigure $s -remote [list $host $port] -buffering none -translation binary
+ return $s
+ }
+ proc disconnect {socket} {
+ close $socket
+ }
+ proc send {socket msg} {
+ puts -nonewline $socket $msg
+ }
+
+}