Patch title: Release 94 bulk changes
Abstract:
File: /pliant/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"
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"
module "/pliant/linux/storage/filesystem.pli"


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
  if this_computer:env:"logical":id:"cooped"="false"
    execute id+" root "+(file_os_name lc_root:id)+"pliant/"+
  else
    if lc_user:id=0
      file_tree_copy "file:/lib/modules/" lc_root:id+"lib/mo


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
  if this_computer:env:"logical":id:"cooped"="false"
    execute id+" root "+(file_os_name lc_root:id)+"pliant/"+
  else
    if lc_user:id=0
      file_tree_copy "file:/lib/modules/" lc_root:id+"lib/mo
      if (file_query lc_root:id+"proc/modules" standard)=undefined
        filesystem_mount "file:proc" lc_root:id+"proc" "filesystem [dq]proc[dq]"
    execute id+pre+" module /pliant/fullpliant/run.pli" root


    execute id+pre+" module /pliant/fullpliant/run.pli" root


function lc_cpu id -> cpu
  arg Str id ; arg Float cpu
  if not (this_computer:env:"logical":id:"user" parse (var Int user))
    return undefined
  cpu := 0
  var Array:FileInfo files := file_list "file:/proc/" standard+directories
  for (var Int i) 0 files:size-1
    if (files:i:name parse "file:/proc/" (var Int pid) "/")
      (var Stream s) open files:i:name+"status" in+safe
      var Int uid := undefined ; var CBool running := false # var Int sleepavg := 100
      while not s:atend
        var Str l := s readline
        l parse "Uid" ":" uid any
        if (l parse "State" ":" "R" any)
          running := true
        # l parse "SleepAVG" ":" sleepavg any
      if uid=user
        if running
          cpu += 1
        # cpu += (100-sleepavg)/100

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
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