Patch title: Release 85 bulk changes
Abstract:
File: /pliant/appli/photo/photo.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/admin/file.pli"
module "/pliant/protocol/http/server.pli"
module "/pliant/protocol/http/style/default.style"
module "/pliant/protocol/http/style/draw.pli"
module "/pliant/protocol/http/common/cache.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/image/lazy.pli"
module "/pliant/language/unsafe.pli"
module "/pliant/admin/file.pli"
module "/pliant/protocol/http/server.pli"
module "/pliant/protocol/http/style/default.style"
module "/pliant/protocol/http/style/draw.pli"
module "/pliant/protocol/http/common/cache.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/image/lazy.pli"
module "/pliant/graphic/filter/io.pli"
module "jpeg.pli"
module "env.pli"
module "load.pli"
module "print.pli"



method page photo root_path
  arg_rw HtmlPage page ; arg Str root_path
  implicit page
    if (virtual_path 0 1)<>"/"
      return
    var Int aa_x := max (min resample_antialiasing_x 1) 8
    var Int aa_y := max (min resample_antialiasing_y 1) 8
    var Str subpath := virtual_path 1 virtual_path:len
    if (virtual_path virtual_path:len-1)="/"
      var Array:FileInfo files := file_list root_path+subpat
      var Int columns := max (min icon_columns 100) 1
      table columns columns border 0
        for (var Int i) 0 files:size-1
          if files:i:is_directory
            if options="level2" and (files:i:name 0 1)<>"."
              var Array:FileInfo files2 := file_list root_pa
              var List:Str images := var List:Str empty_list
              for (var Int j) 0 files2:size-1
                if (lower files2:j:extension)=".jpeg" or (lo
                  photo_cache root_path+subpath+files:i:name
                  images += files2:j:name ; count += 1
              cell
                link files:i:name files:i:name
                fixed [ ] ; small (text string:count)
              var Int col := 1
              while col<columns and count>0
                memory_random addressof:(var uInt r) uInt:si
                r %= cast count uInt
                var Pointer:Str s :> images first
                for (var Int j) 1 r
                  s :> images next s
                cell
                  var Str icon := photo_cache root_path+subp
                  var Str url := image_cache_record icon "" 
module "jpeg.pli"
module "env.pli"
module "load.pli"
module "print.pli"



method page photo root_path
  arg_rw HtmlPage page ; arg Str root_path
  implicit page
    if (virtual_path 0 1)<>"/"
      return
    var Int aa_x := max (min resample_antialiasing_x 1) 8
    var Int aa_y := max (min resample_antialiasing_y 1) 8
    var Str subpath := virtual_path 1 virtual_path:len
    if (virtual_path virtual_path:len-1)="/"
      var Array:FileInfo files := file_list root_path+subpat
      var Int columns := max (min icon_columns 100) 1
      table columns columns border 0
        for (var Int i) 0 files:size-1
          if files:i:is_directory
            if options="level2" and (files:i:name 0 1)<>"."
              var Array:FileInfo files2 := file_list root_pa
              var List:Str images := var List:Str empty_list
              for (var Int j) 0 files2:size-1
                if (lower files2:j:extension)=".jpeg" or (lo
                  photo_cache root_path+subpath+files:i:name
                  images += files2:j:name ; count += 1
              cell
                link files:i:name files:i:name
                fixed [ ] ; small (text string:count)
              var Int col := 1
              while col<columns and count>0
                memory_random addressof:(var uInt r) uInt:si
                r %= cast count uInt
                var Pointer:Str s :> images first
                for (var Int j) 1 r
                  s :> images next s
                cell
                  var Str icon := photo_cache root_path+subp
                  var Str url := image_cache_record icon "" 
                  image url files:i:name+s
                  var Str target := files:i:name+s
                  icon url
                    goto_url target
                col += 1
                images remove s ; count -= 1
              for (var Int j) col columns-1
                cell void
          eif (lower files:i:extension)=".jpeg" or (lower fi
            cell
              var Str icon := photo_cache root_path+subpath+
              var Str url := image_cache_record icon "" "jpe
                col += 1
                images remove s ; count -= 1
              for (var Int j) col columns-1
                cell void
          eif (lower files:i:extension)=".jpeg" or (lower fi
            cell
              var Str icon := photo_cache root_path+subpath+
              var Str url := image_cache_record icon "" "jpe
              image url files:i:name
              var Str target := files:i name
              icon url
                goto_url target
              # image files:i:name+"?icon+"+generate_id file
      for (var Int i) 0 files:size-1
        if files:i:is_directory
          if options<>"level2" and (files:i:name 0 1)<>"."
            link files:i:name files:i:name ; eol
        eif (lower files:i:extension)<>".jpeg" and (lower fi
              # image files:i:name+"?icon+"+generate_id file
      for (var Int i) 0 files:size-1
        if files:i:is_directory
          if options<>"level2" and (files:i:name 0 1)<>"."
            link files:i:name files:i:name ; eol
        eif (lower files:i:extension)<>".jpeg" and (lower fi
          color lsh 50 0 0
          font color (color hsl 0 0 50)
            text files:i:name ; eol
    else
      var Str screen := ""
      if screen_options<>""
        screen += " extra "+string:screen_options
      if false
        if screen_temperature<>5000
          screen += " screen_temperature "+(string page:scre
        if screen_orthogonal<>5000
          screen += " screen_orthogonal "+(string page:scree
      var Str commands := jpeg_get_comment root_path+subpath
      var Str action := "zoom"
      var ExtendedStatus status := photo_load root_path+subp
      if status=success
        page draw photo position
          selected (var Float x0) (var Float y0) (var Float 
          if (commands option "rotate_left") or (commands op
            swap x0 y0 ; swap x1 y1
          if x1<x0
            swap x0 x1
          if y1<y0
            swap y0 y1
          if action="zoom"
            var ExtendedStatus status2 := photo_load root_pa
            if status2=success
              draw zoom
            # para
            #   text "zoom "+string:x0+" "+string:y0+" "+str
          eif action="crop" or action="uncrop"
            var Str rotate := shunt (commands option "rotate
            var Float exposure := commands option "exposure"
            var Float dark := commands option "dark" Float
            var Float light := commands option "light" Float
            var Float dull := commands option "dull" Float
            var Float contrast := commands option "contrast"
            var Float temperature := commands option "temper
            var Float orthogonal := commands option "orthogo
            var Float saturation := commands option "saturat
            var Str cmd := ""
            if action="crop"
              cmd += " crop "+(string x0 "fixed 0")+" "+(str
            if rotate<>""
              cmd += " "+rotate
            if exposure=defined
              cmd += " exposure "+string:exposure
            if dark=defined
              cmd += " dark "+string:dark
            if light=defined
              cmd += " light "+string:light
            if dull=defined
              cmd += " dull "+string:dull
            if contrast=defined
              cmd += " contrast "+string:contrast
            if temperature=defined
              cmd += " temperature "+string:temperature
            if orthogonal=defined
              cmd += " orthogonal "+string:orthogonal
            if saturation=defined
              cmd += " saturation "+string:saturation
            if cmd<>commands
              jpeg_set_comment root_path+subpath cmd
            reload_page
          else
            reload_page
      else
        para
          italic (text status:message)
      table columns 4 border 0 padding 0 spacing 2
        cell
          if allowed:"photo_edit"
            select "Action:" action noeol
              option "Zoom" "zoom"
              option "Crop" "crop"
              option "Uncrop" "uncrop"
            eol
            var Str rotate := shunt (commands option "rotate
            select "Rotate: " rotate noeol
              option "" ""
              option "left" "rotate_left"
              option "right" "rotate_right"
        cell
          if allowed:"photo_edit"
            var Float exposure := commands option "exposure"
            var Str extra := ""
            input "exposure: " exposure length 5 noeol
            var Float dark := commands option "dark" Float
            if advanced
              input "dark: " dark length 5 noeol
            eif dark=defined
              extra += " dark "+string:dark
            var Float light := commands option "light" Float
            if advanced
              input "light: " light length 5 noeol
            eif light=defined
              extra += " light "+string:light
            var Float dull := commands option "dull" Float
            if advanced
              input "dull: " dull length 5 noeol
            eif dull=defined
              extra += " dull "+string:dull
            var Float contrast := commands option "contrast"
            input "contrast: " contrast length 5 noeol
            eol
            var Float temperature := commands option "temper
            input "temperature: " temperature length 4 noeol
            var Float orthogonal := commands option "orthogo
            input "g.r.: " orthogonal length 4 noeol noeol
            var Float saturation := commands option "saturat
            input "saturation: " saturation length 5 noeol
        cell
          if allowed:"photo_edit"
            page button "Update" noeol
              var Str cmd := ""
              if ((commands (commands option_position "crop"
                cmd += " crop "+(string x0 "fixed 0")+" "+(s
              if rotate<>""
                cmd += " "+rotate
              if exposure=defined
                cmd += " exposure "+string:exposure
              if advanced
                if dark=defined
                  cmd += " dark "+string:dark
                if light=defined
                  cmd += " light "+string:light
                if dull=defined
                  cmd += " dull "+string:dull
              else
                cmd += extra
              if contrast=defined
                cmd += " contrast "+string:contrast
              if temperature=defined
                cmd += " temperature "+string:temperature
              if orthogonal=defined
                cmd += " orthogonal "+string:orthogonal
              if saturation=defined
                cmd += " saturation "+string:saturation
              if cmd<>commands
                jpeg_set_comment root_path+subpath cmd
              reload_page
          if allowed:"photo_print"
            fixed [   ]
            icon "/pliant/appli/photo/printer.png"
              title "Print photo"
              var Float mm_x := print_mm_x ; var Float mm_y 
              var Float offset_x := 0 ; var Float offset_y :
              input "Photo size on paper: " mm_x length 3 no
              input "" mm_y length 3 noeol ; [ (horizontal x
              input "Photo offset on paper: " offset_x lengt
              input "" offset_y length 3 noeol ; [ (horizont
              var Str queue := default_printer
              select "Printer: " queue
                each p this_computer:env:"printer"
                  option p:"label" keyof:p
              button "print it"
                var ExtendedStatus status2 := photo_print ro
                if status2=success
                  goto_backward
                else
                  text "failed: "+status2:message
      small text:commands ; fixed [  ]
      note "help"
        var Str name := root_path+subpath
        table columns 5
          samples name "exposure"
          samples name "dark"
          samples name "light"
          sample name "dull -0.05"
          sample name "dull -0.01"
          sample name ""
          sample name "dull 0.01"
          sample name "dull 0.05"
          samples name "contrast"
          sample name "temperature 3500"
          sample name "temperature 4500"
          sample name "temperature 5000"
          sample name "temperature 5500"
          sample name "temperature 6500"
          sample name "orthogonal 3500"
          sample name "orthogonal 4500"
          sample name "orthogonal 5000"
          sample name "orthogonal 5500"
          sample name "orthogonal 6500"
          samples name "saturation"
        execute_dynamic_page "pliant:/pliant/graphic/color/a
            text files:i:name ; eol
    else
      var Str screen := ""
      if screen_options<>""
        screen += " extra "+string:screen_options
      if false
        if screen_temperature<>5000
          screen += " screen_temperature "+(string page:scre
        if screen_orthogonal<>5000
          screen += " screen_orthogonal "+(string page:scree
      var Str commands := jpeg_get_comment root_path+subpath
      var Str action := "zoom"
      var ExtendedStatus status := photo_load root_path+subp
      if status=success
        page draw photo position
          selected (var Float x0) (var Float y0) (var Float 
          if (commands option "rotate_left") or (commands op
            swap x0 y0 ; swap x1 y1
          if x1<x0
            swap x0 x1
          if y1<y0
            swap y0 y1
          if action="zoom"
            var ExtendedStatus status2 := photo_load root_pa
            if status2=success
              draw zoom
            # para
            #   text "zoom "+string:x0+" "+string:y0+" "+str
          eif action="crop" or action="uncrop"
            var Str rotate := shunt (commands option "rotate
            var Float exposure := commands option "exposure"
            var Float dark := commands option "dark" Float
            var Float light := commands option "light" Float
            var Float dull := commands option "dull" Float
            var Float contrast := commands option "contrast"
            var Float temperature := commands option "temper
            var Float orthogonal := commands option "orthogo
            var Float saturation := commands option "saturat
            var Str cmd := ""
            if action="crop"
              cmd += " crop "+(string x0 "fixed 0")+" "+(str
            if rotate<>""
              cmd += " "+rotate
            if exposure=defined
              cmd += " exposure "+string:exposure
            if dark=defined
              cmd += " dark "+string:dark
            if light=defined
              cmd += " light "+string:light
            if dull=defined
              cmd += " dull "+string:dull
            if contrast=defined
              cmd += " contrast "+string:contrast
            if temperature=defined
              cmd += " temperature "+string:temperature
            if orthogonal=defined
              cmd += " orthogonal "+string:orthogonal
            if saturation=defined
              cmd += " saturation "+string:saturation
            if cmd<>commands
              jpeg_set_comment root_path+subpath cmd
            reload_page
          else
            reload_page
      else
        para
          italic (text status:message)
      table columns 4 border 0 padding 0 spacing 2
        cell
          if allowed:"photo_edit"
            select "Action:" action noeol
              option "Zoom" "zoom"
              option "Crop" "crop"
              option "Uncrop" "uncrop"
            eol
            var Str rotate := shunt (commands option "rotate
            select "Rotate: " rotate noeol
              option "" ""
              option "left" "rotate_left"
              option "right" "rotate_right"
        cell
          if allowed:"photo_edit"
            var Float exposure := commands option "exposure"
            var Str extra := ""
            input "exposure: " exposure length 5 noeol
            var Float dark := commands option "dark" Float
            if advanced
              input "dark: " dark length 5 noeol
            eif dark=defined
              extra += " dark "+string:dark
            var Float light := commands option "light" Float
            if advanced
              input "light: " light length 5 noeol
            eif light=defined
              extra += " light "+string:light
            var Float dull := commands option "dull" Float
            if advanced
              input "dull: " dull length 5 noeol
            eif dull=defined
              extra += " dull "+string:dull
            var Float contrast := commands option "contrast"
            input "contrast: " contrast length 5 noeol
            eol
            var Float temperature := commands option "temper
            input "temperature: " temperature length 4 noeol
            var Float orthogonal := commands option "orthogo
            input "g.r.: " orthogonal length 4 noeol noeol
            var Float saturation := commands option "saturat
            input "saturation: " saturation length 5 noeol
        cell
          if allowed:"photo_edit"
            page button "Update" noeol
              var Str cmd := ""
              if ((commands (commands option_position "crop"
                cmd += " crop "+(string x0 "fixed 0")+" "+(s
              if rotate<>""
                cmd += " "+rotate
              if exposure=defined
                cmd += " exposure "+string:exposure
              if advanced
                if dark=defined
                  cmd += " dark "+string:dark
                if light=defined
                  cmd += " light "+string:light
                if dull=defined
                  cmd += " dull "+string:dull
              else
                cmd += extra
              if contrast=defined
                cmd += " contrast "+string:contrast
              if temperature=defined
                cmd += " temperature "+string:temperature
              if orthogonal=defined
                cmd += " orthogonal "+string:orthogonal
              if saturation=defined
                cmd += " saturation "+string:saturation
              if cmd<>commands
                jpeg_set_comment root_path+subpath cmd
              reload_page
          if allowed:"photo_print"
            fixed [   ]
            icon "/pliant/appli/photo/printer.png"
              title "Print photo"
              var Float mm_x := print_mm_x ; var Float mm_y 
              var Float offset_x := 0 ; var Float offset_y :
              input "Photo size on paper: " mm_x length 3 no
              input "" mm_y length 3 noeol ; [ (horizontal x
              input "Photo offset on paper: " offset_x lengt
              input "" offset_y length 3 noeol ; [ (horizont
              var Str queue := default_printer
              select "Printer: " queue
                each p this_computer:env:"printer"
                  option p:"label" keyof:p
              button "print it"
                var ExtendedStatus status2 := photo_print ro
                if status2=success
                  goto_backward
                else
                  text "failed: "+status2:message
      small text:commands ; fixed [  ]
      note "help"
        var Str name := root_path+subpath
        table columns 5
          samples name "exposure"
          samples name "dark"
          samples name "light"
          sample name "dull -0.05"
          sample name "dull -0.01"
          sample name ""
          sample name "dull 0.01"
          sample name "dull 0.05"
          samples name "contrast"
          sample name "temperature 3500"
          sample name "temperature 4500"
          sample name "temperature 5000"
          sample name "temperature 5500"
          sample name "temperature 6500"
          sample name "orthogonal 3500"
          sample name "orthogonal 4500"
          sample name "orthogonal 5000"
          sample name "orthogonal 5500"
          sample name "orthogonal 6500"
          samples name "saturation"
        execute_dynamic_page "pliant:/pliant/graphic/color/a
      if allowed:"photo_download"
        fixed [     ]
        note "download"
          var ExtendedStatus status2 := photo_load root_path+subpath "" (var Link:ImagePrototype photo2)
          if status2=success
            reset_http_answer
            http_request answer_mime_type := "binary/*"
            http_request send_header
            photo2 save http_request:stream "filter [dq].jpeg[dq] quality 1"
            http_request send_footer
      eol
      eol
      may_draw
        table columns 2 border 0
          cell
            [Original:]
          cell
            [Corrected:]
          cell
            var ExtendedStatus status := photo_load root_pat
            if status=success
              draw photo
          cell
            var ExtendedStatus status := photo_load root_pat
            if status=success
              draw photo
      table columns 2 border 0
        cell
          [Original:]
        cell
          [Corrected:]
        cell
          var ExtendedStatus status := photo_load root_path+subpath "resample "+string:control_size_x+" "+string:control_size_y+" antialiasing "+string:aa_x+" "+string:aa_y+" quality "+string:edit_quality+" no_crop reset"+screen (var Link:ImagePrototype photo)
          if status=success
            draw photo
        cell
          var ExtendedStatus status := photo_load root_path+subpath "resample "+string:control_size_x+" "+string:control_size_y+" antialiasing "+string:aa_x+" "+string:aa_y+" quality "+string:edit_quality+" no_crop"+screen (var Link:ImagePrototype photo)
          if status=success
            draw photo

export '. photo'

export '. photo'