Patch title: Release 90 bulk changes
Abstract:
File: /graphic/sample/pdf_test.pli
Key:
    Removed line
    Added line
# pliant 'precompile /binary/browser.dump module /pliant/graphic/sample/precompile.pli' module /pliant/graphic/sample/pdf_test.pli command 'pdf_test "file:/pdf/ec1217.pdf" "" 1 90'

module "/pliant/language/unsafe.pli"
module "/pliant/graphic/draw/prototype.pli"
module "/pliant/graphic/draw/displaylist.pli"
module "/pliant/graphic/draw/image.pli"
module "/pliant/language/stream.pli"
module "/pliant/graphic/vfilter/prototype.pli"
module "/pliant/graphic/vfilter/all.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/graphic/image/convert.pli"
module "/pliant/graphic/image/antialiasing.pli"
module "/pliant/graphic/image/packed.pli"
module "/pliant/graphic/image/lazy.pli"
module "/pliant/graphic/filter/io.pli"
module "/openpack/graphic/filter/postscript.pli"
module "/pliant/language/data/cache.pli"

module "/pliant/language/debug/profiler.pli"

constant profile false
constant profile_recurse 2^30


function pdf_test filename page dpi -> status
  arg Str filename ; arg Int page dpi ; arg ExtendedStatus status
  cache_shrink 0 cache_class_costy
  console "ripping PDF " filename " " memory_current_used\2^20 " MB" eol
  var DateTime start0 := datetime
  var Link:DrawDisplayList list :> new DrawDisplayList
  (var Stream s) open (replace filename ".pdf" ".txt") in+safe
  var Str gamutname := s readline
  s close
  if profile
    profiler_recurse := profile_recurse
    profiler_start
  var DateTime start := datetime
  status := list load filename "filter [dq].pdf[dq] page "+string:page+" resolution "+(string 4*dpi)+" verbose"+(shunt gamutname<>"" " gamut "+string:gamutname "")+" margin 50"
  if status=failure
    console "failed to load " filename " (" status:message ")"
    return
  each w list:warnings
    console "  " w eol
  console "gamut is " list:gamut:name eol
  console "loading " (string datetime:seconds-start:seconds "fixed 0") " seconds " memory_current_used\2^20 " MB" eol
  if profile
    profiler_stop
    (var Stream s) open "file:/tmp/profiler.txt" out+safe
    profiler_report "" "" s
    (var Stream s) open "file:/tmp/profiler.txt" in+safe
    (var Stream s2) open "file:/tmp/profiler2.txt" out+safe
    while not s:atend
      var Str l := s readline
      if (l parse (var Str fun) (var Str pos) (var Int ticks))
        s2 writeline l
        profiler_report fun pos s2
        s2 writeline ""
    s close
    s2 close
  start := datetime
  var Link:DrawImage draw :> new DrawImage
  # draw load filename "filter [dq].pdf[dq] page "+string:page+" resolution "+(string 4*dpi)+" verbose"+(shunt gamutname<>"" " gamut "+string:gamutname "")
  list replay draw
  console "draw " (string datetime:seconds-start:seconds "fixed 0") " seconds "  memory_current_used\2^20 " MB" eol
  if true
    start := datetime
    var Link:ImageAntiAliasing aa :> new ImageAntiAliasing
    aa bind draw:draw_image 4 4
    var Link:ImagePacked final :> new ImagePacked
    final setup aa ""
    var Address buffer := memory_allocate final:line_size null
    for (var Int y) 0 final:size_y-1
      aa read 0 y aa:size_x buffer
      final write 0 y final:size_x buffer
    memory_free buffer
    console "antialiasing " (string datetime:seconds-start:seconds "fixed 0") " seconds" eol
    start := datetime
    var Link:ImageConvert conv :> new ImageConvert
    conv bind final color_gamut:"rgb" "fast"
    var Link:ImagePacked rgb :> new ImagePacked
    rgb setup conv ""
    var Address buffer := memory_allocate rgb:line_size null
    for (var Int y) 0 rgb:size_y-1
      conv read 0 y aa:size_x buffer
      rgb write 0 y rgb:size_x buffer
    memory_free buffer
    console "convert " (string datetime:seconds-start:seconds "fixed 0") " seconds" eol
    start := datetime
    if (filename search ".pdf" -1)<>(-1)
      rgb save (replace filename ".pdf" ".png") "filter [dq].png[dq]"
    else
      console "unexpected file name '" filename "'" eol
      return
    console "store " (string datetime:seconds-start:seconds "fixed 0") " seconds" eol
  eif true # aa then conv
    start := datetime
    var Link:ImageAntiAliasing aa :> new ImageAntiAliasing
    aa bind draw:draw_image 4 4
    var Link:ImageConvert conv :> new ImageConvert
    conv bind aa color_gamut:"rgb" "fast"
    if (filename search ".pdf" -1)<>(-1)
      conv save (replace filename ".pdf" ".png") "filter [dq].png[dq]"
    else
      console "unexpected file name '" filename "'" eol
      return
    console "display " (string datetime:seconds-start:seconds "fixed 0") " seconds" eol
  else # conv then aa
    start := datetime
    var Link:ImageConvert conv :> new ImageConvert
    conv bind draw:draw_image color_gamut:"rgb" "fast"
    var Link:ImageAntiAliasing aa :> new ImageAntiAliasing
    aa bind conv 4 4
    if (filename search ".pdf" -1)<>(-1)
      aa save (replace filename ".pdf" ".png") "filter [dq].png[dq]"
    else
      console "unexpected file name '" filename "'" eol
      return
    console "display " (string datetime:seconds-start:seconds "fixed 0") " seconds" eol
  console "total " (string datetime:seconds-start0:seconds "fixed 0") " seconds" eol


function ps_test filename dpi options -> status
  arg Str filename ; arg Int dpi ; arg Str options ; arg ExtendedStatus status
  cache_shrink 0 cache_class_costy
  var DateTime start := datetime
  console "ripping PostScript " filename " " memory_current_used\2^20 " MB" eol
  var Link:ImagePacked image :> new ImagePacked
  status := image load "gzip:"+filename+".gz" "filter [dq].ps[dq] resolution "+(string 4*dpi)+" "+options
  if status=failure
    return
  # console "gamut is " lazy:gamut:name eol
  # console "resolution is " (string lazy:size_x/(lazy:x1-lazy:x0)*25.4 "fixed 0") " dpi" eol
  console "rip " (string datetime:seconds-start:seconds "fixed 0") " seconds "  memory_current_used\2^20 " MB" eol


function test filename dpi
  arg Str filename ; arg Int dpi
  if (filename search ".pdf" -1)<>(-1)
    pdf_test filename 1 dpi
  eif (filename search ".ps" -1)<>(-1)
    ps_test filename dpi ""
  else
    pdf_test filename+".pdf" 1 dpi
    ps_test filename+".ps" dpi ""
    ps_test filename+".ps" dpi "transparency"


export pdf_test ps_test test