home *** CD-ROM | disk | FTP | other *** search
/ Practical Programming in Tcl & Tk (4th Edition) / TCLBOOK4.BIN / pc / exsource / 43_6.tcl < prev    next >
Text File  |  2003-04-16  |  889b  |  44 lines

  1. #
  2. # Example 43-6
  3. # The client side of remote evaluation.
  4. #
  5.  
  6. proc Eval_Open {server port} {
  7.     global eval
  8.     set sock [socket $server $port]
  9.     # Save this info for error reporting
  10.     set eval(server,$sock) $server:$port
  11.     return $sock
  12. }
  13. proc Eval_Remote {sock args} {
  14.     global eval
  15.     # Preserve the concat semantics of eval
  16.     if {[llength $args] > 1} {
  17.         set cmd [concat $args]
  18.     } else {
  19.         set cmd [lindex $args 0]
  20.     }
  21.     puts $sock $cmd
  22.     flush $sock
  23.     # Read return line count and the result.
  24.     gets $sock lines
  25.     set result {}
  26.     while {$lines > 0} {
  27.         gets $sock x
  28.         append result $x\n
  29.         incr lines -1
  30.     }
  31.     set code [lindex $result 0]
  32.     set x [lindex $result 1]
  33.     # Cleanup the end of the stack
  34.     regsub "\[^\n]+$" [lindex $result 2] \
  35.         "*Remote Server $eval(server,$sock)*" stack
  36.     set ec [lindex $result 3]
  37.     return -code $code -errorinfo $stack -errorcode $ec $x
  38. }
  39. proc Eval_Close {sock} {
  40.     close $sock
  41. }
  42.  
  43.  
  44.