Patch title: Release 90 bulk changes
Abstract:
File: /graphic/image/prototype.pli
Key:
    Removed line
    Added line
   
abstract
  ['ImagePrototype' is defining the API to deal with pixels 


abstract
  ['ImagePrototype' is defining the API to deal with pixels 


module "/pliant/language/unsafe.pli"
module "/pliant/language/compiler.pli"
module "/pliant/graphic/color/gamut.pli"


method p read x y count adr
  oarg_rw ImagePrototype p ; arg Int x y count ; arg Address
  generic
module "/pliant/graphic/color/gamut.pli"


method p read x y count adr
  oarg_rw ImagePrototype p ; arg Int x y count ; arg Address
  generic
  error error_id_missing "Not implemented"
  error error_id_missing "Not implemented for "+(entry_type addressof:p):name

method p write x y count adr
  oarg_rw ImagePrototype p ; arg Int x y count ; arg Address
  generic

method p write x y count adr
  oarg_rw ImagePrototype p ; arg Int x y count ; arg Address
  generic
  error error_id_missing "Not implemented"
  error error_id_missing "Not implemented for "+(entry_type addressof:p):name


method p fill x y count pixel
  oarg_rw ImagePrototype p ; arg Int x y count ; arg Address
  generic
  check count>0 and x>=0 and x+count<=p:size_x and y>=0 and 
  function fill buf count psize pixel
    arg Address buf ; arg Int count psize ; arg Address pixe


method p fill x y count pixel
  oarg_rw ImagePrototype p ; arg Int x y count ; arg Address
  generic
  check count>0 and x>=0 and x+count<=p:size_x and y>=0 and 
  function fill buf count psize pixel
    arg Address buf ; arg Int count psize ; arg Address pixe
    if optimize and psize>=2 and psize<=4
    if optimize and psize=1
      var uInt color := pixel map uInt8 ; color := color+color*2^8
      fill buf count\2 2 addressof:color
      if count%2=1
        buf map uInt8 count-1 := pixel map uInt8
    eif optimize and psize=2
      var uInt color := pixel map uInt16 ; color := color+color*2^16
      fill buf count\2 4 addressof:color
      if count%2=1
        buf map uInt16 count-1 := pixel map uInt16
    eif optimize and psize=3
      var uInt color := pixel map uInt32
      var uInt color := pixel map uInt32
      var Address dest := buf ; var Address stop := dest tra
      var Address dest := buf ; var Address stop := dest translate Byte (count-1)*3
      while dest<>stop
        dest map uInt32 := color
        dest := dest translate Byte psize
      while dest<>stop
        dest map uInt32 := color
        dest := dest translate Byte psize
      memory_copy pixel dest 3
      memory_copy pixel dest psize
    eif optimize and psize=4
      var uInt color := pixel map uInt32
      var Address dest := buf ; var Address stop := dest translate uInt32 count
      while dest<>stop
        dest map uInt32 := color
        dest := dest translate uInt32
    else
      var Address dest := buf ; var Address stop := dest tra
      while dest<>stop
        memory_copy pixel dest psize
        dest := dest translate Byte psize
  var Int done := 0
  while done<count
    var Address start := p write_map x+done y 1 count-done (
    if start<>null
      fill start step p:pixel_size pixel
      p write_unmap x+done y step start
      done += step
    else
      var Address buf := memory_allocate (count-done)*p:pixe
      fill buf count-done p:pixel_size pixel
    else
      var Address dest := buf ; var Address stop := dest tra
      while dest<>stop
        memory_copy pixel dest psize
        dest := dest translate Byte psize
  var Int done := 0
  while done<count
    var Address start := p write_map x+done y 1 count-done (
    if start<>null
      fill start step p:pixel_size pixel
      p write_unmap x+done y step start
      done += step
    else
      var Address buf := memory_allocate (count-done)*p:pixe
      fill buf count-done p:pixel_size pixel
      p write x+done y count-done start
      memory_free start
      p write x+done y count-done buf
      memory_free buf
      done := count

      done := count

if false
  method p fill x y size_x size_y pixel
    oarg_rw ImagePrototype p ; arg Int x y size_x size_y ; a
    check size_x>0 and size_y>0 and x>=0 and x+p:size_x<=siz
    for (var Int i) y y+size_y-1
      p fill x i size_x pixel
method p clip x0 y0 x1 y1
  oarg ImagePrototype p ; arg_rw Int x0 y0 x1 y1
  generic
  x0 := max x0 0
  y0 := max y0 0
  x1 := min x1 p:size_x
  y1 := min y1 p:size_y


method p rectangle_read_map x y x0 y0 x1 y1 step_x step_y -> adr
  oarg_rw ImagePrototype p ; arg Int x y ; arg_w Int x0 y0 x1 y1 step_x step_y ; arg Address adr
  generic
  adr := p read_map x y 1 p:size_x-x (var Int count)
  if adr<>null
    x0 := x ; y0 := y ; x1 := x+count ; y1 := y+1
    step_x := p pixel_size ; step_y := undefined

method p rectangle_read_unmap x0 y0 x1 y1 adr
  oarg_rw ImagePrototype p ; arg Int x0 y0 x1 y1 ; arg Address adr
  generic

method p line_size -> ls
  arg ImagePrototype p ; arg Int ls
  ls := p:pixel_size*p:size_x



function image_prototype x0 y0 x1 y1 rx ry aa_x aa_y adjust 
  arg Float x0 y0 x1 y1 rx ry ; arg Int aa_x aa_y adjust ; o
  check adjust>=image_adjust_extend and adjust<=image_adjust
  var Int size_x := (max (cast (abs x1-x0)*(rx/25.4)+(shunt 
  var Int size_y := (max (cast (abs y1-y0)*(ry/25.4)+(shunt 
  p := image_prototype x0 y0 x0+size_x/(rx/25.4)*((x1-x0)/(a
method p line_size -> ls
  arg ImagePrototype p ; arg Int ls
  ls := p:pixel_size*p:size_x



function image_prototype x0 y0 x1 y1 rx ry aa_x aa_y adjust 
  arg Float x0 y0 x1 y1 rx ry ; arg Int aa_x aa_y adjust ; o
  check adjust>=image_adjust_extend and adjust<=image_adjust
  var Int size_x := (max (cast (abs x1-x0)*(rx/25.4)+(shunt 
  var Int size_y := (max (cast (abs y1-y0)*(ry/25.4)+(shunt 
  p := image_prototype x0 y0 x0+size_x/(rx/25.4)*((x1-x0)/(a