Patch title: Release 84 bulk changes
Abstract:
File: /pliant/linux/storage/cdrom.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/stream/pipe.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/linux/kernel/device.pli"
module "/pliant/admin/execute.pli"
module "/pliant/admin/file.pli"
module "/pliant/language/ui/ansi_terminal.pli"


function cdrom_record image options -> status
  arg Str image options ; arg ExtendedStatus status
  var Str engraver := "engraver"+(options option "engraver" 
  var Str device := this_computer:env:"hardware":engraver:"d
  var Str interface := this_computer:env:"hardware":engraver
  var Str engraver_options := this_computer:env:"hardware":e
  if not (this_computer:env:"hardware":engraver:"speed" pars
    speed := undefined    
  if not (this_computer:env:"hardware":engraver:"cache_mb" p
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/stream/pipe.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/linux/kernel/device.pli"
module "/pliant/admin/execute.pli"
module "/pliant/admin/file.pli"
module "/pliant/language/ui/ansi_terminal.pli"


function cdrom_record image options -> status
  arg Str image options ; arg ExtendedStatus status
  var Str engraver := "engraver"+(options option "engraver" 
  var Str device := this_computer:env:"hardware":engraver:"d
  var Str interface := this_computer:env:"hardware":engraver
  var Str engraver_options := this_computer:env:"hardware":e
  if not (this_computer:env:"hardware":engraver:"speed" pars
    speed := undefined    
  if not (this_computer:env:"hardware":engraver:"cache_mb" p
    cache_mb := memory_physical\(16*2^20)
    cache_mb := memory_assigned\16\2^20
    cache_mb := max (min cache_mb 16) 4
  if interface="ide"
    execute "rmmod ide-cd" quiet
    execute "rmmod cdrom" quiet
    execute "insmod scsi_mod" quiet
    execute "insmod ide-scsi" quiet
    execute "insmod sg" quiet
  eif interface="scsi"
    execute "rmmod sr_mod" quiet
    execute "rmmod cdrom" quiet
    execute "insmod sg" quiet
  if (engraver_options option "pio")
    execute "hdparm -d0 "+file_os_name:device quiet
  eif (engraver_options option "dma")
    execute "hdparm -d1 "+file_os_name:device quiet
  if this_computer:env:"pliant":"system":"distribution"="ful
    for (var Int i) 0 15
      kernel_make_device "device:/sg"+string:i
  var Str dev := this_computer:env:"hardware":engraver:"scsi
  if dev=""
    dev := "0,0,0"
  eif (dev parse (var Int scsi_id))
    dev := "0,"+dev+",0"
  eif (dev parse (var Int scsi_channel) "," (var Int scsi_id
    dev := dev+",0"
  var Str rec := "cdrecord dev="+dev+(shunt speed=defined " 
  var Int err
  part engrave
    if (options option "rw")
      var Str blank := "cdrecord dev="+dev+(shunt speed=defi
      part blank "Blanking read/write CD"
        var Int seconds := engraver_options option "keyboard
        if seconds=defined
          stream_pipe (var Str pipe_in) (var Str pipe_out)
          thread
            (var Stream kbd) open pipe_out out+safe
            sleep seconds
            kbd writeline ""
            kbd flush anytime
          err := execute blank input pipe_in output "file:/t
        else
          err := execute blank output "file:/tmp/cdrom.log" 
      if err=0
        file_delete "file:/tmp/cdrom.log"
      else
        status := failure "Failed to blank RW CD"
        if file_os_name:image=""
          (var Stream pipe) open image in+safe ; pipe close
        leave engrave
    part record "Engraving ISO9660 image on CD "+(options op
      if file_os_name:image<>""
        err := execute rec+" "+file_os_name:image output "fi
      else
        err := execute rec+" -" input image output "file:/tm
    if err=0
      file_delete "file:/tmp/cdrom.log"
      status := success
    else
      status := failure "Failed to engrave the CD ISO9660 im
  if interface="ide"
    execute "rmmod sg" quiet
    execute "rmmod ide-scsi" quiet
    execute "rmmod scsi_mod" quiet
    execute "insmod cdrom" quiet
    execute "insmod ide-cd" quiet
  eif interface="scsi"
    execute "rmmod sg" quiet
    execute "insmod cdrom" quiet
    execute "insmod sr_mod" quiet



export cdrom_engrave
export cdrom_image cdrom_record
export cdrom_file
    cache_mb := max (min cache_mb 16) 4
  if interface="ide"
    execute "rmmod ide-cd" quiet
    execute "rmmod cdrom" quiet
    execute "insmod scsi_mod" quiet
    execute "insmod ide-scsi" quiet
    execute "insmod sg" quiet
  eif interface="scsi"
    execute "rmmod sr_mod" quiet
    execute "rmmod cdrom" quiet
    execute "insmod sg" quiet
  if (engraver_options option "pio")
    execute "hdparm -d0 "+file_os_name:device quiet
  eif (engraver_options option "dma")
    execute "hdparm -d1 "+file_os_name:device quiet
  if this_computer:env:"pliant":"system":"distribution"="ful
    for (var Int i) 0 15
      kernel_make_device "device:/sg"+string:i
  var Str dev := this_computer:env:"hardware":engraver:"scsi
  if dev=""
    dev := "0,0,0"
  eif (dev parse (var Int scsi_id))
    dev := "0,"+dev+",0"
  eif (dev parse (var Int scsi_channel) "," (var Int scsi_id
    dev := dev+",0"
  var Str rec := "cdrecord dev="+dev+(shunt speed=defined " 
  var Int err
  part engrave
    if (options option "rw")
      var Str blank := "cdrecord dev="+dev+(shunt speed=defi
      part blank "Blanking read/write CD"
        var Int seconds := engraver_options option "keyboard
        if seconds=defined
          stream_pipe (var Str pipe_in) (var Str pipe_out)
          thread
            (var Stream kbd) open pipe_out out+safe
            sleep seconds
            kbd writeline ""
            kbd flush anytime
          err := execute blank input pipe_in output "file:/t
        else
          err := execute blank output "file:/tmp/cdrom.log" 
      if err=0
        file_delete "file:/tmp/cdrom.log"
      else
        status := failure "Failed to blank RW CD"
        if file_os_name:image=""
          (var Stream pipe) open image in+safe ; pipe close
        leave engrave
    part record "Engraving ISO9660 image on CD "+(options op
      if file_os_name:image<>""
        err := execute rec+" "+file_os_name:image output "fi
      else
        err := execute rec+" -" input image output "file:/tm
    if err=0
      file_delete "file:/tmp/cdrom.log"
      status := success
    else
      status := failure "Failed to engrave the CD ISO9660 im
  if interface="ide"
    execute "rmmod sg" quiet
    execute "rmmod ide-scsi" quiet
    execute "rmmod scsi_mod" quiet
    execute "insmod cdrom" quiet
    execute "insmod ide-cd" quiet
  eif interface="scsi"
    execute "rmmod sg" quiet
    execute "insmod cdrom" quiet
    execute "insmod sr_mod" quiet



export cdrom_engrave
export cdrom_image cdrom_record
export cdrom_file