Patch title: Release 85 bulk changes
Abstract:
File: /pliant/graphic/filter/io.pli
Key:
    Removed line
    Added line
   
abstract
  [Reading and writing a Pliant image from or to a file.]


method p load stream options -> status
  oarg_rw ImagePrototype p ; arg_rw Stream stream ; arg Str 
  var Link:ImageReadFilter f :> image_read_filter (shunt (op
  if not exists:f
    return (failure "There is no filter for "+stream:name+" 
  status := f open stream options (var ImagePrototype h)
  if status=failure
    return
  if (p setup h options)=failure
    return failure:"Cannot setup image"
abstract
  [Reading and writing a Pliant image from or to a file.]


method p load stream options -> status
  oarg_rw ImagePrototype p ; arg_rw Stream stream ; arg Str 
  var Link:ImageReadFilter f :> image_read_filter (shunt (op
  if not exists:f
    return (failure "There is no filter for "+stream:name+" 
  status := f open stream options (var ImagePrototype h)
  if status=failure
    return
  if (p setup h options)=failure
    return failure:"Cannot setup image"
  p options := h options
  var Address buffer := null
  part read_lines "load image "+(entry_type addressof:f):nam
    for (var Int y) 0 p:size_y-1
      part line "line "+string:y+"/"+(string p:size_y)
        if stream=failure
          status := failure "Image input stream is broken"
          leave read_lines
        if trace and 100*y\p:size_y<>100*(y-1)\p:size_y
          console stream:name " " (string 100*y\p:size_y) "%
        var Address adr := p write_map 0 y p:size_x p:size_x
        if adr<>null
          if (f readline adr)=failure
            status := failure "Failed to read mapped line "+
            p write_unmap 0 y count adr
            leave read_lines
          p write_unmap 0 y count adr
        else
          if buffer=null
            buffer := memory_allocate p:line_size addressof:
          if (f readline buffer)=failure
            status := failure "Failed to read line "+(string
            leave read_lines
          p write 0 y p:size_x buffer
  if buffer<>null
    memory_free buffer
  if f:close=failure
    if status=success
      status := failure "Failed to close the image input fil
  if trace
    console (repeat stream:name:len+7 " ") "[cr]"


method p save stream options -> status
  oarg_rw ImagePrototype p ; arg_rw Stream stream ; arg Str 
  var Link:ImageWriteFilter f :> image_write_filter (shunt (
  if not exists:f
    return (failure "There is no filter for "+stream:name+" 
  var ImagePrototype h := image_prototype p:x0 p:y0 p:x1 p:y
  var Address buffer := null
  part read_lines "load image "+(entry_type addressof:f):nam
    for (var Int y) 0 p:size_y-1
      part line "line "+string:y+"/"+(string p:size_y)
        if stream=failure
          status := failure "Image input stream is broken"
          leave read_lines
        if trace and 100*y\p:size_y<>100*(y-1)\p:size_y
          console stream:name " " (string 100*y\p:size_y) "%
        var Address adr := p write_map 0 y p:size_x p:size_x
        if adr<>null
          if (f readline adr)=failure
            status := failure "Failed to read mapped line "+
            p write_unmap 0 y count adr
            leave read_lines
          p write_unmap 0 y count adr
        else
          if buffer=null
            buffer := memory_allocate p:line_size addressof:
          if (f readline buffer)=failure
            status := failure "Failed to read line "+(string
            leave read_lines
          p write 0 y p:size_x buffer
  if buffer<>null
    memory_free buffer
  if f:close=failure
    if status=success
      status := failure "Failed to close the image input fil
  if trace
    console (repeat stream:name:len+7 " ") "[cr]"


method p save stream options -> status
  oarg_rw ImagePrototype p ; arg_rw Stream stream ; arg Str 
  var Link:ImageWriteFilter f :> image_write_filter (shunt (
  if not exists:f
    return (failure "There is no filter for "+stream:name+" 
  var ImagePrototype h := image_prototype p:x0 p:y0 p:x1 p:y
  h options := p options
  status := f open stream options h
  if status=failure
    return
  var Int burst := options option "burst" Int
  if burst=undefined and (options option "burst") and proces
    burst := processor_count
  if burst=defined and burst>1
    (var MtBuffer buffers) size := p line_size
    part burst_write_lines "burst "+string:burst+" save imag
      parallel threads burst
        for (var Int y) 0 p:size_y-1
          if status=success
            if trace and 100*y\p:size_y<>100*(y-1)\p:size_y
              console stream:name " " (string 100*y\p:size_y
            var Address buffer
            task
              share p f buffers
              buffer := buffers allocate
              part read_line "burst read line "+string:y+"/"
                p read 0 y p:size_x buffer
            post
              part write_line "burst write line "+string:y+"
                if (f writeline buffer)=failure
                  status := failure "Failed to write line "+
              buffers free buffer               
              if stream=failure
                status := failure "Image output stream is br
  else
    var Address buffer := null
    part write_lines "save image "+(entry_type addressof:f):
      for (var Int y) 0 p:size_y-1
        if status=failure
          leave write_lines
        part line "line "+string:y+"/"+(string p:size_y)
          if trace and 100*y\p:size_y<>100*(y-1)\p:size_y
            console stream:name " " (string 100*y\p:size_y) 
          var Address adr := p read_map 0 y p:size_x p:size_
          if adr<>null
            if (f writeline adr)=failure
              status := failure "Failed to write mapped line
            p read_unmap 0 y count adr
          else
            if buffer=null
              buffer := memory_allocate p:line_size addresso
            p read 0 y p:size_x buffer
            if (f writeline buffer)=failure
              status := failure "Failed to write line "+(str
          if stream=failure
            status := failure "Image output stream is broken
    if buffer<>null
      memory_free buffer
  if f:close=failure
    if status=success
      status := failure "Failed to close the image output fi
  if trace
    console (repeat stream:name:len+7 " ") "[cr]"


  status := f open stream options h
  if status=failure
    return
  var Int burst := options option "burst" Int
  if burst=undefined and (options option "burst") and proces
    burst := processor_count
  if burst=defined and burst>1
    (var MtBuffer buffers) size := p line_size
    part burst_write_lines "burst "+string:burst+" save imag
      parallel threads burst
        for (var Int y) 0 p:size_y-1
          if status=success
            if trace and 100*y\p:size_y<>100*(y-1)\p:size_y
              console stream:name " " (string 100*y\p:size_y
            var Address buffer
            task
              share p f buffers
              buffer := buffers allocate
              part read_line "burst read line "+string:y+"/"
                p read 0 y p:size_x buffer
            post
              part write_line "burst write line "+string:y+"
                if (f writeline buffer)=failure
                  status := failure "Failed to write line "+
              buffers free buffer               
              if stream=failure
                status := failure "Image output stream is br
  else
    var Address buffer := null
    part write_lines "save image "+(entry_type addressof:f):
      for (var Int y) 0 p:size_y-1
        if status=failure
          leave write_lines
        part line "line "+string:y+"/"+(string p:size_y)
          if trace and 100*y\p:size_y<>100*(y-1)\p:size_y
            console stream:name " " (string 100*y\p:size_y) 
          var Address adr := p read_map 0 y p:size_x p:size_
          if adr<>null
            if (f writeline adr)=failure
              status := failure "Failed to write mapped line
            p read_unmap 0 y count adr
          else
            if buffer=null
              buffer := memory_allocate p:line_size addresso
            p read 0 y p:size_x buffer
            if (f writeline buffer)=failure
              status := failure "Failed to write line "+(str
          if stream=failure
            status := failure "Image output stream is broken
    if buffer<>null
      memory_free buffer
  if f:close=failure
    if status=success
      status := failure "Failed to close the image output fi
  if trace
    console (repeat stream:name:len+7 " ") "[cr]"