Patch title: Release 93 bulk changes
Abstract:
File: /protocol/lpr/spool.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/unsafe.pli"
module "/pliant/language/schedule/daemon.pli"
module "/pliant/language/schedule/resourcesem.pli"
module "/pliant/language/context.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/admin/file.pli"
submodule "database.pli"


constant print_postscript os_api="linux"
constant print_pdf os_api="linux"
constant print_png true
constant print_jpeg true
constant print_packed true
constant print_html false
constant embedded file_os_name:"embedded:/"<>file_os_name:"f
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/unsafe.pli"
module "/pliant/language/schedule/daemon.pli"
module "/pliant/language/schedule/resourcesem.pli"
module "/pliant/language/context.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/admin/file.pli"
submodule "database.pli"


constant print_postscript os_api="linux"
constant print_pdf os_api="linux"
constant print_png true
constant print_jpeg true
constant print_packed true
constant print_html false
constant embedded file_os_name:"embedded:/"<>file_os_name:"f
constant fullpliant this_computer:env:"pliant":"system":"distribution"="fullpliant"
constant uid_gid 7
constant purge_errors_after 86400 # seconds


  function lpr_print_postscript file job prn -> status
    arg Str file ; arg_rw Data:LprJob job ; arg_rw Stream pr
    var Data:LprQueue printer :> job printer
constant uid_gid 7
constant purge_errors_after 86400 # seconds


  function lpr_print_postscript file job prn -> status
    arg Str file ; arg_rw Data:LprJob job ; arg_rw Stream pr
    var Data:LprQueue printer :> job printer
    if embedded
      var Str temp := replace file_temporary "file:/" "embed
      if (file_clone file temp)=failure
        file_copy file temp
    part rip
      stream_pipe (var Str in_pipe) (var Str out_pipe)
      var Str gs_resolution := (string printer:resolution_x*
      if (printer:options option "papersize")
        gs_resolution += " -sPAPERSIZE="+(printer:options op
      thread
    part rip
      stream_pipe (var Str in_pipe) (var Str out_pipe)
      var Str gs_resolution := (string printer:resolution_x*
      if (printer:options option "papersize")
        gs_resolution += " -sPAPERSIZE="+(printer:options op
      thread
        if embedded
        if not fullpliant
          var Str cmd := "gs -sDEVICE=ppmraw -r"+gs_resolution+" -sOutputFile=- -q -dNOPAUSE -dSAFER "+file_os_name:file+" -c quit"
          if (execute cmd output out_pipe)<>0
            console cmd eol
        eif embedded
          var Str temp := replace file_temporary "file:/" "embedded:/"
          if (file_clone file temp)=failure
            file_copy file temp
          var Str cmd := "gs -sDEVICE=ppmraw -r"+gs_resoluti
          if (execute cmd root "embedded:/" path "embedded:/
            console cmd eol
          var Str cmd := "gs -sDEVICE=ppmraw -r"+gs_resoluti
          if (execute cmd root "embedded:/" path "embedded:/
            console cmd eol
          file_delete temp
        else
        else
          var Str cmd := "gs -sDEVICE=ppmraw -r"+gs_resoluti
          if (execute cmd user uid_gid group uid_gid output 
          var Str jail := "file:/tmp/"+generate_id+"/"
          file_copy file jail+"print.ps"
          file_tree_create jail+"bin/" ; file_clone "file:/bin/gs" jail+"bin/gs"
          file_tree_create jail+"lib/"
          var Array:FileInfo libs := file_list "file:/lib/" standard+relative
          for (var Int i) 0 libs:size-1
            file_clone "file:/lib/"+libs:i:name jail+"lib/"+libs:i:name
          file_tree_create jail+"tmp/" ; file_rights jail+"tmp/" uid_gid uid_gid 0 0
          file_tree_rights jail undefined undefined 4 0 5 0
          var Str cmd := "/bin/gs -sDEVICE=ppmraw -r"+gs_resolution+" -sOutputFile=- -q -dNOPAUSE -dSAFER /print.ps -c quit"
          if (execute cmd root jail path jail user uid_gid group uid_gid output out_pipe)<>0
            console cmd eol
            console cmd eol
          file_tree_delete jail
      var Link:Stream s :> new Stream
      s open in_pipe in+safe+bigcache ; var Int page := 0
      while not s:atend_workaround
        page += 1 ; job r_comment := "page "+string:page
        var Link:ImageLazy lazy :> new ImageLazy
        status := lazy bind s "filter [dq].ppm[dq] resolutio
        if lazy=failure
          leave rip
        var Link:ImageResampling rs
        if printer:margin_left<>0 or printer:margin_top<>0 o
          var Int ix0 := max (lazy index_x printer:margin_le
          var Int iy0 := max (lazy index_y printer:margin_to
          var Int ix1 := max (min (lazy index_x printer:size
          var Int iy1 := max (min (lazy index_y printer:size
          var Link:ImageResampling rs :> new ImageResampling
          status := rs bind lazy (lazy mm_x ix0) (lazy mm_y 
          if status=failure
            leave rip
        else
          rs :> addressof:lazy map ImageResampling
        status := lpr_print rs "" job prn
        if status=failure
          leave rip
        lazy read 0 lazy:size_y-1 1 addressof:(var ColorBuff
      status := success
      var Link:Stream s :> new Stream
      s open in_pipe in+safe+bigcache ; var Int page := 0
      while not s:atend_workaround
        page += 1 ; job r_comment := "page "+string:page
        var Link:ImageLazy lazy :> new ImageLazy
        status := lazy bind s "filter [dq].ppm[dq] resolutio
        if lazy=failure
          leave rip
        var Link:ImageResampling rs
        if printer:margin_left<>0 or printer:margin_top<>0 o
          var Int ix0 := max (lazy index_x printer:margin_le
          var Int iy0 := max (lazy index_y printer:margin_to
          var Int ix1 := max (min (lazy index_x printer:size
          var Int iy1 := max (min (lazy index_y printer:size
          var Link:ImageResampling rs :> new ImageResampling
          status := rs bind lazy (lazy mm_x ix0) (lazy mm_y 
          if status=failure
            leave rip
        else
          rs :> addressof:lazy map ImageResampling
        status := lpr_print rs "" job prn
        if status=failure
          leave rip
        lazy read 0 lazy:size_y-1 1 addressof:(var ColorBuff
      status := success
    if embedded
      file_delete temp


export lpr_filename lpr_open lpr_close lpr_error lpr_cancel 
export lpr_init lpr_spool lpr_stop lpr_restart lpr_rip_slot


export lpr_filename lpr_open lpr_close lpr_error lpr_cancel 
export lpr_init lpr_spool lpr_stop lpr_restart lpr_rip_slot