Patch title: Release 90 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"


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"


  method p mm_x i -> x
    arg ImagePrototype p ; arg Int i ; arg Float x
    x := p:x0+(p:x1-p:x0)*i/p:size_x

  method p mm_y i -> y
    arg ImagePrototype p ; arg Int i ; arg Float y
    y := p:y0+(p:y1-p:y0)*i/p:size_y

  method stream atend_workaround -> c
    arg_rw Stream stream ; arg CBool c
    while not stream:atend and (stream:stream_read_cur map C
      stream readline
    c := stream atend

  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*
  method stream atend_workaround -> c
    arg_rw Stream stream ; arg CBool c
    while not stream:atend and (stream:stream_read_cur map C
      stream readline
    c := stream atend

  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 option "papersize" Str)
      thread
        if embedded
          execute "gs -sDEVICE=ppmraw -r"+gs_resolution+" -s
        else
          execute "gs -sDEVICE=ppmraw -r"+gs_resolution+" -s
      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
      thread
        if embedded
          execute "gs -sDEVICE=ppmraw -r"+gs_resolution+" -s
        else
          execute "gs -sDEVICE=ppmraw -r"+gs_resolution+" -s
      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 := lazy index_x printer:margin_left
          var Float fx0 := lazy:x0+(lazy:x1-lazy:x0)*ix0/laz
          var Int iy0 := lazy index_y printer:margin_left
          var Float fy0 := lazy:y0+(lazy:y1-lazy:y0)*iy0/laz
          var Int ix1 := lazy index_x printer:size_x-printer
          var Float fx1 := lazy:x0+(lazy:x1-lazy:x0)*ix1/laz
          var Int iy1 := lazy index_y printer:size_y-printer
          var Float fy1 := lazy:y0+(lazy:y1-lazy:y0)*iy1/laz
          var Int ix0 := max (lazy index_x printer:margin_left) 0
          var Int iy0 := max (lazy index_y printer:margin_top) 0
          var Int ix1 := max (min (lazy index_x printer:size_x-printer:margin_right) lazy:size_x) ix0+1
          var Int iy1 := max (min (lazy index_y printer:size_y-printer:margin_bottom) lazy:size_y) iy0+1
          var Link:ImageResampling rs :> new ImageResampling
          var Link:ImageResampling rs :> new ImageResampling
          status := rs bind lazy fx0 fy0 fx1 fy1 ix1-ix0 iy1
          status := rs bind lazy (lazy mm_x ix0) (lazy mm_y iy0) (lazy mm_x ix1) (lazy mm_y iy1) ix1-ix0 iy1-iy0
          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
          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