Patch title: Release 96 bulk changes
Abstract:
File: /pliant/fullpliant/run.pli
Key:
    Removed line
    Added line
abstract
  [This is the script that will start the FullPLiant operating system services.]

module "/pliant/language/context.pli"
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/admin/file.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/fullpliant/user.pli"

pliant_compiler_semaphore request

function log
  (var Stream log) open "file:/log/pliant.log" append+safe
  log writeline "run "+string:datetime
  (var Stream err) open "file:/tmp/console" in+safe
  while not err:atend
    log writeline "  "+err:readline
  err close ; log close
  file_delete"file:/tmp/console" 
log

if (constant this_computer:env:"kernel":"make":"CONFIG_ISDN"="y" or this_computer:env:"kernel":"make":"CONFIG_ISDN"="m")
  module "/pliant/linux/network/isdn.pli"

function clean_tmp_directory
  var Array:FileInfo files := file_list "file:/tmp/" standard
  for (var Int i) 0 files:size-1
    if (files:i:name_without_path parse "pliant_" any)
      if files:i:is_directory
        file_tree_delete files:i:name
      else
        file_delete files:i:name
clean_tmp_directory

gvar Str precompile := ""

if (constant this_computer:env:"pliant":"dns":"service"="true")
  constant (compile_message "Compiling DNS server. Please wait ...")
  precompile += "/pliant/protocol/dns/server.pli[lf]"
  module "/pliant/protocol/dns/server.pli"
  compile_message ""
  dns_server cache this_computer:env:"pliant":"dns":"cache" default this_computer:env:"pliant":"dns":"default" detached

if (constant (file_query "security:/dhcp.conf" standard)=defined)
  module "/pliant/linux/network/dhcp.pli"
  dhcp_server

if (constant this_computer:env:"pliant":"mail":"smtp_service"="true")
  constant (compile_message "Compiling SMTP server. Please wait ...")
  precompile += "/pliant/protocol/smtp/server.pli[lf]"
  module "/pliant/protocol/smtp/server.pli"
  compile_message ""
  smtp_server detached

if (constant this_computer:env:"pliant":"mail":"pop3_service"="true")
  constant (compile_message "Compiling POP3 server. Please wait ...")
  precompile += "/pliant/protocol/pop3/server.pli[lf]"
  module "/pliant/protocol/pop3/server.pli"
  compile_message ""
  pop3_server detached

if (constant this_computer:env:"pliant":"mail":"redirect_service"="true")
  constant (compile_message "Compiling mail redirection daemon. Please wait ...")
  precompile += "/pliant/protocol/smtp/redirect.pli[lf]"
  module "/pliant/protocol/smtp/redirect.pli"
  compile_message ""
  redirect_mails
  console "Mailboxes redirection daemon is running." eol

if (constant this_computer:env:"pliant":"ftp":"service"="true")
  constant (compile_message "Compiling FTP server. Please wait ...")
  precompile += "/pliant/protocol/ftp/server.pli[lf]"
  module "/pliant/protocol/ftp/server.pli"
  compile_message ""
  ftp_server detached

if (constant this_computer:env:"pliant":"remote":"service"="true")
  constant (compile_message "Compiling remote execution server. Please wait ...")
  precompile += "/pliant/util/remote/server.pli[lf]"
  module "/pliant/util/remote/server.pli"
  compile_message ""
  remote_server detached

if (constant this_computer:env:"pliant":"cluster":"service"="true")
  constant (compile_message "Compiling clustering server. Please wait ...")
  precompile += "/pliant/appli/cluster/server.pli[lf]"
  module "/pliant/appli/cluster/server.pli"
  compile_message ""
  cluster_server detached
if (constant this_computer:env:"pliant":"cluster":"daemon"="true")
  constant (compile_message "Compiling clustering daemon. Please wait ...")
  precompile += "/pliant/appli/cluster/daemon.pli[lf]"
  module "/pliant/appli/cluster/daemon.pli"
  compile_message ""
  cluster_daemon

if (constant this_computer:env:"pliant":"lpr":"service"="true")
  constant (compile_message "Compiling LPR server. Please wait ...")
  precompile += "/pliant/protocol/lpr/server.pli[lf]"
  module "/pliant/protocol/lpr/server.pli"
  compile_message ""
  lpr_server detached
eif (constant this_computer:env:"printer":size>0)
  constant (compile_message "Compiling print spooler. Please wait ...")
  precompile += "/pliant/protocol/lpr/spool.pli[lf]"
  module "/pliant/protocol/lpr/spool.pli"
  compile_message ""
  lpr_spool
  console "Print spooler is running." eol

if (constant this_computer:env:"pliant":"browser":"service"="true") or (constant this_computer:env:"pliant":"browser":"console"="true")
  constant (compile_message "Compiling Pliant browser server. Please wait ...")
  precompile += "/pliant/graphic/browser/server/main.pli[lf]"
  module "/pliant/graphic/browser/server/main.pli"
  constant (compile_message "Compiling browser basic applications. Please wait ...")
  module "/pliant/graphic/browser/sample/run.pli" # FIXME
if (constant this_computer:env:"pliant":"ui":"service"="true") or (constant this_computer:env:"pliant":"ui":"http_proxy"="true") or (constant this_computer:env:"pliant":"ui":"console"="true")
  constant (compile_message "Compiling Pliant ui server. Please wait ...")
  precompile += "/pliant/graphic/ui/server/main.pli[lf]"
  module "/pliant/graphic/ui/server/main.pli"
  constant (compile_message "Compiling ui applets. Please wait ...")
  module "/pliant/graphic/ui/sample/run.pli" # FIXME
  compile_message ""
  browser_server
  console "Pliant browser server is running." eol
if (constant this_computer:env:"pliant":"multiplexer":"service"="true") or (constant this_computer:env:"pliant":"browser":"service"="true")
  ui_server
  console "Pliant ui server is running." eol
if (constant this_computer:env:"pliant":"multiplexer":"service"="true") or (constant this_computer:env:"pliant":"ui":"service"="true") or (constant this_computer:env:"pliant":"ui":"http_proxy"="true") or (constant this_computer:env:"pliant":"ui":"console"="true")
  constant (compile_message "Compiling Pliant TCP port multiplexer. Please wait ...")
  precompile += "/pliant/util/pml/multiplexer.pli[lf]"
  module "/pliant/util/pml/multiplexer.pli"
  compile_message ""
  gvar Int mx_port := multiplexer_server
  if mx_port<>undefined
    console "Pliant multiplexer is running on TCP port " mx_port eol
if (constant this_computer:env:"pliant":"browser":"console"="true")
  constant (compile_message "Compiling Pliant browser client. Please wait ...")
  precompile += "/pliant/graphic/browser/client/main.pli[lf]"
  module "/pliant/graphic/browser/client/main.pli"
if (constant this_computer:env:"pliant":"ui":"console"="true")
  constant (compile_message "Compiling Pliant ui client. Please wait ...")
  precompile += "/pliant/graphic/ui/client/main.pli[lf]"
  module "/pliant/graphic/ui/client/main.pli"
  module "/pliant/language/stream/loopback.pli"
  module "/pliant/util/pml/multiplexer.pli"
  multiplexer_port "loopback:/server/browser" "loopback:/client/browser"
  multiplexer_port "loopback:/server/ui" "loopback:/client/ui"
  compile_message ""
  function run_browser
  function run_ui
    thread
      console "Pliant browser console is running." eol
      var ExtendedStatus status := browser_client "console [dq]framebuffer[dq] terminal 2 url [dq]loopback:/[dq] windows_manager [dq]loopback:/windows_manager[dq]"
      console "Pliant ui console is running." eol
      var ExtendedStatus status := ui_client "console [dq]framebuffer[dq] terminal 2 url [dq]loopback:/[dq] windows_manager [dq]loopback:/windows_manager[dq]"
      if status=failure
        console "No. in facts, the browser returned error: " status:message eol
  run_browser
        console "No. in facts, the ui returned error: " status:message eol
  run_ui

if (constant os_api="linux" and (exists this_computer:env:"logical"))
  constant (compile_message "Compiling logical computers support. Please wait ...")
  precompile += "/pliant/fullpliant/logical.pli[lf]"
  module "/pliant/fullpliant/logical.pli"
  compile_message ""

if (constant this_computer:env:"pliant":"system":"medium"="cdrom")
  module "recover.pli"

if (constant this_computer:env:"pliant":"system":"distribution"<>"fullpliant")
  module "/pliant/install/install.pli"

compile_message "Compiling HTTP server. Please wait ..."
precompile += "/pliant/protocol/http/server.pli[lf]"
precompile += "/pliant/protocol/http/style/default.style[lf]"
module "/pliant/protocol/http/server.pli"
compile_message ""
if (constant this_computer:env:"pliant":"ui":"http_proxy"="true")
  compile_message "Compiling HTTP proxy server. Please wait ..."
  module "/pliant/graphic/console/http_proxy.pli"
  compile_message ""
else
  compile_message "Compiling HTTP server. Please wait ..."
  precompile += "/pliant/protocol/http/server.pli[lf]"
  precompile += "/pliant/protocol/http/style/default.style[lf]"
  module "/pliant/protocol/http/server.pli"
  compile_message ""

compile_message "Compiling and running custom code. Please wait ..."
function run_custom
  safe
    plugin run
  failure err
    (var Stream log) open "file:/tmp/run.log" out+safe
    log writeline err
run_custom
compile_message ""

compile_message "Starting logging services. Please wait ..."
precompile += "/pliant/language/debug/log_database.pli[lf]"
module "/pliant/language/debug/log_database.pli"
if (constant log_database:data:file:size>0)
  precompile +=  "/pliant/language/debug/trace.pli[lf]"
  precompile +=  "/pliant/language/debug/log.pli[lf]"
  module "/pliant/language/debug/trace.pli"
  module "/pliant/language/debug/log.pli"
  function run_log
    each f log_database:data:file
      trace_log keyof:f f:file f:mini_mb*2n^20 f:maxi_mb*2n^20
    trace_memory := log_database:data:memory
  run_log
compile_message ""

if (constant this_computer:env:"hardware":"video":"x11"="vnc")
  module "/pliant/protocol/vnc/client.pli"
  function run_vnc
    thread
      vnc_client "127.0.0.1" ""
  run_vnc
if (constant this_computer:env:"pliant":"system":"medium"="cdrom")
  function run_recover
    thread
      sleep 15
      recover_menu
  run_recover
if (constant this_computer:env:"pliant":"language":"load"<>"")
  function run_load
    thread
      sleep 120
      safe
        plugin load
          var Str all := this_computer:env:"pliant":"language":"load"
          while all<>""
            if not (all parse any:(var Str first) "[lf]" any:(var Str remain))
              first := all ; remain := ""
            if first<>""
              pliant_compiler_semaphore request
              console "  loading " first eol
              # var DateTime start := datetime
              pliant_load_module first the_module:"/pliant/language/basic/safe.pli" 0 (null map Module)
              # console "  done in " (string datetime:seconds-start:seconds "fixed 0") " second(s)" eol
              pliant_compiler_semaphore release
            all := remain
      failure err
        (var Stream log) open "file:/tmp/load.log" out+safe
        log writeline err
  run_load

if (constant this_computer:env:"pliant":"system":"distribution"="fullpliant")
  if (constant (file_query "file:/boot/boot.flag" standard)=success)
    file_delete "file:/boot/boot.flag"
    if (constant this_computer:env:"pliant":"system":"embedded"<>"" and this_computer:env:"hardware":"video":"x11"<>"none")
      module "embedded/command.pli"
      function run_embedded
        thread
          sleep 2
          embedded_command "xsetroot -solid #407060" ""
          embedded_command "mozilla" "user [dq]me[dq] detached"
          # embedded_command "/usr/lib/mozilla/mozilla-bin" "user [dq]me[dq] detached"
      run_embedded
eif os_api="win32"
  function os_ShellExecute hwnd op file params dir bshow
    arg Int hwnd ; arg CStr op file params dir ; arg Int bshow
    external "shell32.dll" "ShellExecuteA"
  gvar Str login := ""
  if (exists user_database:data:user:"pliant") and user_secret_database:data:password<>""
    login := "pliant:"+user_secret_database:data:password+"@"
  gvar Str url := "http://"+login+"localhost"+(shunt this_computer:env:"pliant":"http":"port"="80" "" ":"+this_computer:env:"pliant":"http":"port")+"/"
  function run_web_browser
    thread
      sleep 2
      os_ShellExecute 0 "open" url "" "c:\" 1
  run_web_browser
if (constant this_computer:env:"pliant":"http":"autoload"<>"no")

if (constant this_computer:env:"pliant":"http":"autoload"<>"no") and (constant this_computer:env:"pliant":"ui":"http_proxy"<>"true")
  function run_autoload
    thread
      sleep 5
      pliant_compiler_semaphore request
      http_precompile "/pliant/protocol/http/default.page"
      http_precompile "/pliant/browse/virtual_tree.page"
      pliant_compiler_semaphore release
  run_autoload

if this_computer:env:"pliant":"language":"recommended"<>precompile
  this_computer "pliant" "language" "recommended" := precompile

function run_http
  pliant_compiler_semaphore release
  if not (this_computer:env:"pliant":"http":"port" parse (var Int port))
    port := 80
  if (constant this_computer:env:"pliant":"system":"distribution"="fullpliant")
  if (constant this_computer:env:"pliant":"ui":"http_proxy"="true")
    if (constant this_computer:env:"pliant":"ui":"console"<>"true")
      module "/pliant/language/stream/loopback.pli"
      multiplexer_port "loopback:/server/ui" "loopback:/client/ui"
      sleep 0.1
    console_http_proxy port port protocol "loopback"
  eif (constant this_computer:env:"pliant":"system":"distribution"="fullpliant")
    http_server port port secured log this_computer:env:"pliant":"http":"log"
  eif os_api="win32"
    http_server port port secured log this_computer:env:"pliant":"http":"log" welcome_message "HTTP server is running.[lf][lf]Pliant URL is "+url
  else
    http_server port port secured log this_computer:env:"pliant":"http":"log" welcome_message "HTTP server is running.[lf][lf]Using your favorite browser, connect to the server via the URL[lf]http://localhost"+(shunt this_computer:env:"pliant":"http":"port"="80" "" ":"+this_computer:env:"pliant":"http":"port")+"/"
run_http