Patch title: Release 93 bulk changes
Abstract:
File: /fullpliant/logical.pli
Key:
    Removed line
    Added line
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/admin/file.pli"
module "this_computer.pli"
module "/pliant/protocol/dns/name.pli"
module "/pliant/admin/execute.pli"
module "/pliant/linux/schedule/process.pli"
module "/pliant/language/schedule/daemon.pli"

public

function lc_root id -> r
  arg Str id r
  r := this_computer:env:"logical":id:"root"
  if r=""
    r := "file:/logical/"+id+"/"

function lc_user id -> u
  arg Str id ; arg Int u
  if not (this_computer:env:"logical":id:"user" parse u)
    u := 1

function lc_group id -> g
  arg Str id ; arg Int g
  if not (this_computer:env:"logical":id:"group" parse g)
    g := 1

function lc_http_port id -> p
  arg Str id ; arg Int p
  p := name_database:data:host:id:http_port

function lc_remote_port id -> p
  arg Str id ; arg Int p
  p := name_database:data:host:id:remote_port

function lc_start id
  arg Str id
  var Str pre := " module /pliant/install/minimal.pli"
  if this_computer:env:"logical":id:"precompile"="true"
    pre := " 'precompile /binary/default.dump module /pliant/install/precompile.pli'"
  if this_computer:env:"logical":id:"cooped"="false"
    execute id+" root "+(file_os_name lc_root:id)+"pliant/ 'precompile /binary/default.dump module /pliant/install/precompile.pli' module /pliant/fullpliant/run.pli" path lc_root:id+"bin/" user lc_user:id group lc_group:id detached
    execute id+" root "+(file_os_name lc_root:id)+"pliant/"+pre+" module /pliant/fullpliant/run.pli" path lc_root:id+"bin/" user lc_user:id group lc_group:id detached
  else
    if lc_user:id=0
      file_tree_copy "file:/lib/modules/" lc_root:id+"lib/modules/"
    execute id+" 'precompile /binary/default.dump module /pliant/install/precompile.pli' module /pliant/fullpliant/run.pli" root lc_root:id path lc_root:id+"bin/" user lc_user:id group lc_group:id detached
    execute id+pre+" module /pliant/fullpliant/run.pli" root lc_root:id path lc_root:id+"bin/" user lc_user:id group lc_group:id detached

function lc_stop id
  arg Str id
  process_kill id ""

function lc_is_running id -> c
  arg Str id ; arg CBool c
  c := process_pid:id=defined

function lc_memory id -> mem
  arg Str id ; arg Intn mem
  var Int pid := process_pid id
  if pid=undefined
    mem := undefined
  else
    mem := undefined
    (var Stream s) open "file:/proc/"+string:pid+"/status" in+safe
    while not s:atend
      if (s:readline parse "VmRSS" ":" (var Int kb) "kB")
        mem := kb*2n^10

daemon "restart logical computers"
  daemon_sleep 120
  while not daemon_emergency
    each logical this_computer:env:"logical"
      if logical:"automatic"="true"
        if not (lc_is_running keyof:logical)
          lc_start keyof:logical
    daemon_sleep 15