Patch title: Release 84 bulk changes
Abstract:
File: /pliant/graphic/image/antialiasing.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
submodule "prototype.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/language/compiler/type/inherit.pli"
module "/pliant/graphic/misc/mtbuffer.pli"


type ImageAntiAliasing
  inherit ImagePrototype
  field Link:ImagePrototype image
  field MtBuffer buffers
module "/pliant/language/compiler.pli"
submodule "prototype.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/language/compiler/type/inherit.pli"
module "/pliant/graphic/misc/mtbuffer.pli"


type ImageAntiAliasing
  inherit ImagePrototype
  field Link:ImagePrototype image
  field MtBuffer buffers
  field Int tile shift
  field Int tile_x tile_y shift


method aa step_y -> s
  arg ImageAntiAliasing aa ; arg Int s


method aa step_y -> s
  arg ImageAntiAliasing aa ; arg Int s
  # s := max image:line_size aa:line_size*tile
  s := aa:line_size*aa:tile
  s := aa:line_size*aa:tile_x




method aa bind image tile -> status
  oarg_rw ImageAntiAliasing aa ; oarg ImagePrototype image ;
method aa bind image tile_x tile_y -> status
  oarg_rw ImageAntiAliasing aa ; oarg ImagePrototype image ; arg Int tile_x tile_y ; arg ExtendedStatus status
  if image:gamut:bits_per_component<>8
    return (failure "Antialiasing on "+(string image:gamut:b
  if image:gamut:bits_per_component<>8
    return (failure "Antialiasing on "+(string image:gamut:b
  var Int shift := 1
  while 2^shift<tile^2
  var Int shift := 0
  while 2^shift<tile_x*tile_y
    shift += 1
    shift += 1
  if tile^2<>2^shift
    return (failure "Antialiasing factor "+string:tile+" is 
  if not smart and (image:size_x%tile<>0 or image:size_y%til
  if tile_x*tile_y<>2^shift
    return (failure "Antialiasing factor "+string:tile_x+"x"+string:tile_y+" is not supported")
  if not smart and (image:size_x%tile_x<>0 or image:size_y%tile_y<>0)
    return failure:"The image sampling is not suited for the
  addressof:aa map ImagePrototype := addressof:image map Ima
  aa image :> image
    return failure:"The image sampling is not suited for the
  addressof:aa map ImagePrototype := addressof:image map Ima
  aa image :> image
  aa tile := tile
  aa tile_x := tile_x ; aa tile_y := tile_y
  aa shift := shift
  aa shift := shift
  aa size_x := image:size_x\tile
  aa size_y := image:size_y\tile
  aa size_x := image:size_x\tile_x
  aa size_y := image:size_y\tile_y
  if smart
  if smart
    aa x1 := image:x0+(image:x1-image:x0)*(aa:size_x*tile)/i
    aa y1 := image:y0+(image:y1-image:y0)*(aa:size_y*tile)/i
  check image:line_size>=aa:line_size*tile
  aa:buffers size := tile*aa:step_y
    aa x1 := image:x0+(image:x1-image:x0)*(aa:size_x*tile_x)/image:size_x
    aa y1 := image:y0+(image:y1-image:y0)*(aa:size_y*tile_y)/image:size_y
  check image:line_size>=aa:line_size*tile_x
  aa:buffers size := aa:step_y*tile_y
  status := success

method aa setup image options -> status
  oarg_rw ImageAntiAliasing aa ; arg ImagePrototype image ; 
  status := success

method aa setup image options -> status
  oarg_rw ImageAntiAliasing aa ; arg ImagePrototype image ; 
  var Int tile := options option "antialiasing" Int
  if tile=undefined
  if not ((options (options option_position "antialiasing" 0) options:len) parse word:"antialiasing" (var Int tile_x) (var Int tile_y) any)
    return failure:"Antialiasing factor not specified"
    return failure:"Antialiasing factor not specified"
  status := aa bind (addressof:image omap ImagePrototype) ti
  status := aa bind (addressof:image omap ImagePrototype) tile_x tile_y


method aa read x y count adr
  oarg_rw ImageAntiAliasing aa ; arg Int x y count ; arg Add
  check x>=0 and count>=0 and x+count<=aa:size_x and y>=0 an


method aa read x y count adr
  oarg_rw ImageAntiAliasing aa ; arg Int x y count ; arg Add
  check x>=0 and count>=0 and x+count<=aa:size_x and y>=0 an
  var Int tile := aa tile
  var Int tile_x := aa tile_x ; var Int tile_y := aa tile_y
  var Int shift := aa shift
  var Int step_x := aa step_x
  var Int step_y := aa step_y
  var Int shift := aa shift
  var Int step_x := aa step_x
  var Int step_y := aa step_y
  var Int next_tile := (tile-1)*step_x
  var Int next_tile := (tile_x-1)*step_x
  var Address buffer := aa:buffers allocate
  var Address buffer := aa:buffers allocate
  for (var Int iy) 0 tile-1
    aa:image read x*tile y*tile+iy count*tile (buffer transl
  for (var Int iy) 0 tile_y-1
    aa:image read x*tile_x y*tile_y+iy count*tile_x (buffer translate Byte iy*step_y)
  var Address src := buffer
  var Address dest := adr
  var Address stop := adr translate Byte count*aa:pixel_size
  while dest<>stop
    for (var Int i) 0 step_x-1 # for each component of the g
      var uInt total := 0
      var Address cy := src
  var Address src := buffer
  var Address dest := adr
  var Address stop := adr translate Byte count*aa:pixel_size
  while dest<>stop
    for (var Int i) 0 step_x-1 # for each component of the g
      var uInt total := 0
      var Address cy := src
      var Int iy := tile
      var Int iy := tile_y
      while iy>0
        var Address cx := cy
      while iy>0
        var Address cx := cy
        var Int ix := tile
        var Int ix := tile_x
        while ix>0
          total += cx map uInt8
          cx := cx translate uInt8 step_x
          ix -= 1
        cy := cy translate uInt8 step_y
        iy -= 1
      src := src translate uInt8 1
      dest map uInt8 := total\2^shift
      dest := dest translate uInt8 1
    src := src translate Byte next_tile    
  aa:buffers free buffer



        while ix>0
          total += cx map uInt8
          cx := cx translate uInt8 step_x
          ix -= 1
        cy := cy translate uInt8 step_y
        iy -= 1
      src := src translate uInt8 1
      dest map uInt8 := total\2^shift
      dest := dest translate uInt8 1
    src := src translate Byte next_tile    
  aa:buffers free buffer