Patch title: Release 85 bulk changes
Abstract:
File: /pliant/fullpliant/embedded/install.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/stream.pli"
module "/pliant/language/stream/filesystembase.pli"
module "/pliant/language/stream/multi.pli"
module "/pliant/language/os.pli"
module "/pliant/language/stream/pipe.pli"
module "/pliant/admin/file.pli"
module "/pliant/admin/execute.pli"
submodule "/pliant/fullpliant/computer.pli"
module "/pliant/fullpliant/debian.pli"
module "/pliant/linux/kernel/device.pli"
module "configure.pli"
module "compile.pli"

public
  constant fullpliant_custom_path "file:/fullpliant/custom/"
module "/pliant/language/stream.pli"
module "/pliant/language/stream/filesystembase.pli"
module "/pliant/language/stream/multi.pli"
module "/pliant/language/os.pli"
module "/pliant/language/stream/pipe.pli"
module "/pliant/admin/file.pli"
module "/pliant/admin/execute.pli"
submodule "/pliant/fullpliant/computer.pli"
module "/pliant/fullpliant/debian.pli"
module "/pliant/linux/kernel/device.pli"
module "configure.pli"
module "compile.pli"

public
  constant fullpliant_custom_path "file:/fullpliant/custom/"
constant force_nonintractive true



function auto_answer c package0 cmd log -> err
  arg_rw Data:Computer c ; arg Str package0 cmd ; arg_rw Str
  stream_pipe (var Str kbd_in) (var Str kbd_out)
  stream_pipe (var Str con_in) (var Str con_out)
  (var FastSem sem) request
  thread
    share sem log
    var Str kbd_layout := c:env:"hardware":"keyboard":"layou
    (var Stream con) open con_in in+safe
    (var Stream kbd) open kbd_out out+linecache+safe



function auto_answer c package0 cmd log -> err
  arg_rw Data:Computer c ; arg Str package0 cmd ; arg_rw Str
  stream_pipe (var Str kbd_in) (var Str kbd_out)
  stream_pipe (var Str con_in) (var Str con_out)
  (var FastSem sem) request
  thread
    share sem log
    var Str kbd_layout := c:env:"hardware":"keyboard":"layou
    (var Stream con) open con_in in+safe
    (var Stream kbd) open kbd_out out+linecache+safe
    var Str package := package0
    var Str package := package0 ; var Int counter := 0
    while not con:atend
      con configure "timeout 2"
      var Str l := con readline
      con configure "timeout ?"
      if (l parse word:"Setting" word:"up" any:(var Str pkg)
    while not con:atend
      con configure "timeout 2"
      var Str l := con readline
      con configure "timeout ?"
      if (l parse word:"Setting" word:"up" any:(var Str pkg)
        package := pkg
        package := pkg ; counter := 0
      log writeline "   "+l ; console "   " l eol
      var Str a := "no answer"
      log writeline "   "+l ; console "   " l eol
      var Str a := "no answer"
      if (l parse any "?" any) or (l parse acword:"hit" acwo
      if (l parse any "?" any) or (l parse any "[lb]" any "[rb]" any) or (l parse any ":") or (l parse acword:"hit" acword:"enter" any) or (l parse acword:"press" acword:"enter" any)
        a := ""
      if pkg="console-tools"
        if (l parse "What keytable to load" any)
          if (kbd_layout parse any:(var Str head) "/" any:(v
            a := head ; kbd_layout := tail
          else
            a := kbd_layout ; kbd_layout := ""
        eif (l parse "Do you want to test the new keymap rig
          a := "n"
        eif (l parse any "Do you want changes to take effect
          a := "n"
      each r c:env:"package":package
        if (keyof:r parse "question" any:(var Str id)) and (
          a := c:env:"package":package "answer"+id
        a := ""
      if pkg="console-tools"
        if (l parse "What keytable to load" any)
          if (kbd_layout parse any:(var Str head) "/" any:(v
            a := head ; kbd_layout := tail
          else
            a := kbd_layout ; kbd_layout := ""
        eif (l parse "Do you want to test the new keymap rig
          a := "n"
        eif (l parse any "Do you want changes to take effect
          a := "n"
      each r c:env:"package":package
        if (keyof:r parse "question" any:(var Str id)) and (
          a := c:env:"package":package "answer"+id
      counter += 1
      if a="no answer" and counter%60=0
        if counter%180=0
          a := "1"
        eif counter%180=120
          a := "no"
        else
          a := ""
      if a<>"no answer"
        log writeline "-> "+a ; console "-> " a eol
        kbd writeline a
    sem release 
  err := execute cmd root "target:/" path "target:/" input k
  sem request ; sem release

function embedded_packages_configure c -> status
  arg_rw Data:Computer c ; arg Status status
  var Str pids := ""
  each p c:env:"package"
    each d p
      if (keyof:d parse "daemon" any)
        pids += unix_service_pids d
  (var Stream log) open "target:/var/log/configure.log" out+
  part configure
    status := success
    for (var Int lap) 1 5
      if a<>"no answer"
        log writeline "-> "+a ; console "-> " a eol
        kbd writeline a
    sem release 
  err := execute cmd root "target:/" path "target:/" input k
  sem request ; sem release

function embedded_packages_configure c -> status
  arg_rw Data:Computer c ; arg Status status
  var Str pids := ""
  each p c:env:"package"
    each d p
      if (keyof:d parse "daemon" any)
        pids += unix_service_pids d
  (var Stream log) open "target:/var/log/configure.log" out+
  part configure
    status := success
    for (var Int lap) 1 5
      if force_nonintractive
        var Array:FileInfo frontends := file_list "target:/usr/share/perl5/Debconf/FrontEnd/" standard
        for (var Int i) 0 frontends:size-1
          if frontends:i:name<>"target:/usr/share/perl5/Debconf/FrontEnd/Noninteractive.pm"
            file_delete frontends:i:name
      var Int err := auto_answer c "" "dpkg --configure -a" 
      if err=0
        leave configure
      (var Stream packages) open "target:/var/lib/dpkg/statu
      while not packages:atend
        var Str l := packages readline
        if (l parse "Package" ":" any:(var Str name))
          void
        eif (l parse "Status" ":" any:(var Str stat))
          if stat<>"install ok installed"
            console "Force configuring package "+name eol
            auto_answer c name "/var/lib/dpkg/info/"+name+".
    status := failure
  each p c:env:"package"
    each d p
      if (keyof:d parse "daemon" any)
        unix_service_cleanup d pids log



      var Int err := auto_answer c "" "dpkg --configure -a" 
      if err=0
        leave configure
      (var Stream packages) open "target:/var/lib/dpkg/statu
      while not packages:atend
        var Str l := packages readline
        if (l parse "Package" ":" any:(var Str name))
          void
        eif (l parse "Status" ":" any:(var Str stat))
          if stat<>"install ok installed"
            console "Force configuring package "+name eol
            auto_answer c name "/var/lib/dpkg/info/"+name+".
    status := failure
  each p c:env:"package"
    each d p
      if (keyof:d parse "daemon" any)
        unix_service_cleanup d pids log