Patch title: Release 90 bulk changes
Abstract:
File: /graphic/image/lut.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
submodule "prototype.pli"
module "/pliant/language/compiler/type/inherit.pli"
module "/pliant/math/curve.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/graphic/color/spectrum.pli" # defines 'expos
module "/pliant/graphic/misc/int.pli"
module "/pliant/graphic/misc/mtbuffer.pli"


method l read x y count adr
  oarg_rw ImageLut l ; arg Int x y count ; arg Address adr
  var Int dim := l:gamut dimension
  var Int psize := l pixel_size
  check l:gradation:size=dim
  var Address buffer := l:buffers allocate
  l:image read x y count buffer
  var Address src := buffer
  var Address stop := src translate uInt8 count*psize
  var Address dest := adr
  var (Pointer Array:(Array Float32 256)) gradation :> l gra
  var Pointer:Float32 remain :> l:remain x*psize
  var Float maxi := l maxi
  var uInt bits := l random_bits ; var Int available := l ra
  while src<>stop
    for (var Int i) 0 dim-1
      var Pointer:(Array Float32 256) g :> gradation i
      var Float f := remain+g:(src map uInt8)
      var Int v := bound (cast f Int) 0 255
      dest map uInt8 := v
      f -= v
      if f<(-maxi)
        f := -maxi
      if f>maxi
        f := maxi
      if available=0
        memory_random addressof:bits uInt:size
        available := uInt:size*8
      if (bits .and. 1)<>0 # send to the right
        remain := 0
module "/pliant/language/compiler.pli"
submodule "prototype.pli"
module "/pliant/language/compiler/type/inherit.pli"
module "/pliant/math/curve.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/graphic/color/spectrum.pli" # defines 'expos
module "/pliant/graphic/misc/int.pli"
module "/pliant/graphic/misc/mtbuffer.pli"


method l read x y count adr
  oarg_rw ImageLut l ; arg Int x y count ; arg Address adr
  var Int dim := l:gamut dimension
  var Int psize := l pixel_size
  check l:gradation:size=dim
  var Address buffer := l:buffers allocate
  l:image read x y count buffer
  var Address src := buffer
  var Address stop := src translate uInt8 count*psize
  var Address dest := adr
  var (Pointer Array:(Array Float32 256)) gradation :> l gra
  var Pointer:Float32 remain :> l:remain x*psize
  var Float maxi := l maxi
  var uInt bits := l random_bits ; var Int available := l ra
  while src<>stop
    for (var Int i) 0 dim-1
      var Pointer:(Array Float32 256) g :> gradation i
      var Float f := remain+g:(src map uInt8)
      var Int v := bound (cast f Int) 0 255
      dest map uInt8 := v
      f -= v
      if f<(-maxi)
        f := -maxi
      if f>maxi
        f := maxi
      if available=0
        memory_random addressof:bits uInt:size
        available := uInt:size*8
      if (bits .and. 1)<>0 # send to the right
        remain := 0
        addressof:remain map Float32 psize := f
        addressof:remain map Float32 psize += f
      else # send to the bottom
        remain := f
      bits := bits\2 ; available -= 1
      src := src translate uInt8 1
      dest := dest translate uInt8 1
      remain :> addressof:remain map Float32 1
    if psize>dim
      memory_copy src dest psize-dim
      src := src translate uInt8 psize-dim
      dest := dest translate uInt8 psize-dim
      remain :> addressof:remain map Float32 psize-dim
  l random_bits := bits
  l random_available := available
  l:buffers free buffer



      else # send to the bottom
        remain := f
      bits := bits\2 ; available -= 1
      src := src translate uInt8 1
      dest := dest translate uInt8 1
      remain :> addressof:remain map Float32 1
    if psize>dim
      memory_copy src dest psize-dim
      src := src translate uInt8 psize-dim
      dest := dest translate uInt8 psize-dim
      remain :> addressof:remain map Float32 psize-dim
  l random_bits := bits
  l random_available := available
  l:buffers free buffer