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

module "/pliant/language/compiler.pli"
module "/pliant/language/context.pli"
module "prototype.pli"
module "/pliant/language/compiler/type/inherit.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/graphic/misc/mtbuffer.pli"

constant debug false



type ImageTransparency
  inherit ImagePrototype
  field Link:ImagePrototype image
  field MtBuffer buffers


type ImageTransparency
  inherit ImagePrototype
  field Link:ImagePrototype image
  field MtBuffer buffers


if debug
  gvar CBool done := false

method t write x y count adr
  oarg_rw ImageTransparency t ; arg Int x y count ; arg Addr

method t write x y count adr
  oarg_rw ImageTransparency t ; arg Int x y count ; arg Addr
  var Int dim := t:gamut dimension ; var Int psize := t pixe
  var Address buffer := t:buffers allocate
  t:image read x y count buffer
  var Address buffer := t:image write_map x y count count (var Int map_count)
  var CBool mapped := buffer<>null
  if not mapped
    buffer := t:buffers allocate
    t:image read x y count buffer
  var Address src := adr
  var Address dest := buffer
  var Address src := adr
  var Address dest := buffer
  var Int dim := t:gamut dimension ; var Int psize := t pixel_size
  if debug
    var CBool advanced := false
  for (var Int i) 0 count-1
    if processor_is_low_indian
      var Int j := 0
      while j<dim
        var Int transp := (src translate Byte dim+j) map Int
        if transp=0
          j += Int size
        else
          transp := transp .and. 255
          if transp=0
            void
          eif transp=255
            dest map uInt8 j := src map uInt8 j
          else
  for (var Int i) 0 count-1
    if processor_is_low_indian
      var Int j := 0
      while j<dim
        var Int transp := (src translate Byte dim+j) map Int
        if transp=0
          j += Int size
        else
          transp := transp .and. 255
          if transp=0
            void
          eif transp=255
            dest map uInt8 j := src map uInt8 j
          else
            if debug and not advanced
              advanced := true
              if y=0
                if not done
                  console "first drawing " j eol
                  done := true
                else
                  console "second drawing " j eol
                  error "double drawing"
            dest map uInt8 j := ((255-transp)*(dest map uInt
          j += 1
    else
            dest map uInt8 j := ((255-transp)*(dest map uInt
          j += 1
    else
      error "not low indian"
      for (var Int j) 0 dim-1
        var uInt8 transp := src map uInt8 dim+j
        if transp=0
          void
        eif transp=255
          dest map uInt8 j := src map uInt8 j
        else
          dest map uInt8 j := ((255-transp)*(dest map uInt8 
    src := src translate Byte psize
    dest := dest translate Byte dim
      for (var Int j) 0 dim-1
        var uInt8 transp := src map uInt8 dim+j
        if transp=0
          void
        eif transp=255
          dest map uInt8 j := src map uInt8 j
        else
          dest map uInt8 j := ((255-transp)*(dest map uInt8 
    src := src translate Byte psize
    dest := dest translate Byte dim
  t:image write x y count buffer
  t:buffers free buffer
  if mapped
    t:image write_unmap x y map_count buffer
  else
    t:image write x y count buffer
    t:buffers free buffer


method t fill x y count pixel
  oarg_rw ImageTransparency t ; arg Int x y count ; arg Addr


method t fill x y count pixel
  oarg_rw ImageTransparency t ; arg Int x y count ; arg Addr
  var Address buffer := t:image write_map x y count count (var Int map_count)
  var CBool mapped := buffer<>null
  if not mapped
    buffer := t:buffers allocate
    t:image read x y count buffer
  var Int dim := t:gamut dimension
  var Int dim := t:gamut dimension
  var Address buffer := t:buffers allocate
  t:image read x y count buffer
  for (var Int i) 0 dim-1
    var Int transp := pixel map uInt8 dim+i    
    if transp=0
      void
    eif transp=255
      var Int color := pixel map uInt8 i
      var Address a := buffer translate uInt8 i
      for (var Int j) 1 count
        a map uInt8 := color
        a := a translate uInt8 dim
    else
      var Int transp255 := 255-transp
      var Int color255 := transp*(pixel map uInt8 i)
      var Address a := buffer translate uInt8 i
      for (var Int j) 1 count
        a map uInt8 := (transp255*(a map uInt8)+color255)\25
        a := a translate uInt8 dim
  for (var Int i) 0 dim-1
    var Int transp := pixel map uInt8 dim+i    
    if transp=0
      void
    eif transp=255
      var Int color := pixel map uInt8 i
      var Address a := buffer translate uInt8 i
      for (var Int j) 1 count
        a map uInt8 := color
        a := a translate uInt8 dim
    else
      var Int transp255 := 255-transp
      var Int color255 := transp*(pixel map uInt8 i)
      var Address a := buffer translate uInt8 i
      for (var Int j) 1 count
        a map uInt8 := (transp255*(a map uInt8)+color255)\25
        a := a translate uInt8 dim
  t:image write x y count buffer
  t:buffers free buffer
  if mapped
    t:image write_unmap x y map_count buffer
  else
    t:image write x y count buffer
    t:buffers free buffer



export ImageTransparency '. bind'



export ImageTransparency '. bind'