Posted to tcl by gps at Fri Apr 10 02:13:14 GMT 2009view pretty
set ::script [info script] proc add {} { while 1 { gets stdin e set code "" foreach i $e { append code "$i + " } set code [string trimright $code "+ "] puts stdout [expr $code] } } proc start-add {} { global script set pipe [open |[list [info nameofexecutable] $script listen] r+] return $pipe } proc eval-stdin {} { uplevel #0 [gets stdin] } proc main {argc argv} { if {1 == $argc} { if {[lindex $argv 0] eq "listen"} { add exit 0 } } set adders [list [start-add] [start-add] [start-add]] set n 1 foreach a $adders { puts $a [list $n $n] flush $a puts "SENT TO:$a" incr n } foreach a $adders { puts RESULTS:[gets $a] } set n -1 foreach a $adders { puts $a [list $n $n] flush $a incr n -1 } foreach a $adders { puts RESULTS:[gets $a] } fileevent stdin readable [list eval-stdin] vwait until_exit } main $::argc $::argv