Posted to tcl by gps at Fri Apr 10 02:13:14 GMT 2009view raw
- 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