Patch title: Release 84 bulk changes
Abstract:
File: /pliant/util/remote/client.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "/pliant/language/parser.pli"
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/util/crypto/channel.pli"
module "/pliant/language/data/string_cast.pli"
module "/pliant/protocol/dns/name.pli"
module "common.pli"


function remote_execute da fun server
  arg_rw DelayedAction da ; arg RemoteFunction fun ; arg Str
  (var TraceSession log) bind remote_trace
  if server=computer_fullname
    if not (exists fun:local_streaming) and not (exists fun:
      if fun:site_offset=defined
        (da:parameter translate Byte fun:site_offset) map St
      execute_within_context da:parameter fun:body
      if (exists fun:success_code)
        execute_within_context da:parameter fun:success_code
      return
  var Pointer:Str message
  if fun:message_offset=defined
    message :> (da:parameter translate Byte fun:message_offs
  else
    message :> var Str drop
  message := ""
  var Link:Stream s :> new Stream
  var Int port := name_database:data:host:server remote_port
module "/pliant/language/compiler.pli"
module "/pliant/language/parser.pli"
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/util/crypto/channel.pli"
module "/pliant/language/data/string_cast.pli"
module "/pliant/protocol/dns/name.pli"
module "common.pli"


function remote_execute da fun server
  arg_rw DelayedAction da ; arg RemoteFunction fun ; arg Str
  (var TraceSession log) bind remote_trace
  if server=computer_fullname
    if not (exists fun:local_streaming) and not (exists fun:
      if fun:site_offset=defined
        (da:parameter translate Byte fun:site_offset) map St
      execute_within_context da:parameter fun:body
      if (exists fun:success_code)
        execute_within_context da:parameter fun:success_code
      return
  var Pointer:Str message
  if fun:message_offset=defined
    message :> (da:parameter translate Byte fun:message_offs
  else
    message :> var Str drop
  message := ""
  var Link:Stream s :> new Stream
  var Int port := name_database:data:host:server remote_port
  s open "channel://"+server+"/site/"+string:(shunt port=def
  s open "zchannel://"+server+"/site/"+string:(shunt port=defined port remote_tcp_port)+"/"+computer_fullname in+out+safe
  if s=failure
    message := "failed to connect to "+server
    log trace "failed to connect to " server
  s writeline "call "+fun:id
  log trace "call "+fun:id
  var Pointer:Int index :> fun:ro_list first
  while exists:index
    var Pointer:TypeField tf :> fun:type field index
    var Str value := to_string (da:parameter translate Byte 
    s writeline "set "+tf:name+" "+value
    log trace "output " tf:name+" "+value
    index :> fun:ro_list next index
  s writeline ""
  while { var Str line := s readline ; line<>"" }
    if (line parse word:"set" _ any:(var Str variable) _ any
      var Pointer:Int index :> fun:rw_dict first variable
      if exists:index
        var Pointer:TypeField tf :> fun:type field index
        from_string (da:parameter translate Byte tf:offset) 
        log trace "input " variable " " value
      else
        log trace "unexpected input " variable " " value
    eif (line parse word:"failure" (var Str msg))
      message := msg
      log trace msg
    else
      log trace "unsupported line: " line
  if message="" and s=failure
    message := "remote process crashed"
  if message=""
    if (exists fun:local_streaming) and fun:ls_offset=define
      (da:parameter translate Byte fun:ls_offset) map Addres
      execute_within_context da:parameter fun:local_streamin
    if (exists fun:success_code)
      execute_within_context da:parameter fun:success_code
  else
    if (exists fun:failure_code)
      execute_within_context da:parameter fun:failure_code




  if s=failure
    message := "failed to connect to "+server
    log trace "failed to connect to " server
  s writeline "call "+fun:id
  log trace "call "+fun:id
  var Pointer:Int index :> fun:ro_list first
  while exists:index
    var Pointer:TypeField tf :> fun:type field index
    var Str value := to_string (da:parameter translate Byte 
    s writeline "set "+tf:name+" "+value
    log trace "output " tf:name+" "+value
    index :> fun:ro_list next index
  s writeline ""
  while { var Str line := s readline ; line<>"" }
    if (line parse word:"set" _ any:(var Str variable) _ any
      var Pointer:Int index :> fun:rw_dict first variable
      if exists:index
        var Pointer:TypeField tf :> fun:type field index
        from_string (da:parameter translate Byte tf:offset) 
        log trace "input " variable " " value
      else
        log trace "unexpected input " variable " " value
    eif (line parse word:"failure" (var Str msg))
      message := msg
      log trace msg
    else
      log trace "unsupported line: " line
  if message="" and s=failure
    message := "remote process crashed"
  if message=""
    if (exists fun:local_streaming) and fun:ls_offset=define
      (da:parameter translate Byte fun:ls_offset) map Addres
      execute_within_context da:parameter fun:local_streamin
    if (exists fun:success_code)
      execute_within_context da:parameter fun:success_code
  else
    if (exists fun:failure_code)
      execute_within_context da:parameter fun:failure_code