Patch title: Release 94 bulk changes
Abstract:
File: /pliant/graphic/misc/vector.pli
Key:
    Removed line
    Added line
   
# gcc -O2 -shared -s -o vector.so -u vector_mul_add -u vector_apply_grid vector.c
module "/pliant/language/context.pli"
module "/pliant/admin/file.pli"
module "/pliant/language/unsafe.pli"

constant use_dll os_api="linux" and (file_query "/pliant/graphic/misc/vector.so" standard)=defined
constant gamut_maximum_dimension 32


function vector_mul_add n f v s
  arg Int n ; arg Float f ; arg (Array Float32 gamut_maximum_dimension) v ; arg Int n ; arg_rw (Array Float32 gamut_maximum_dimension) s
  if use_dll
    external "/pliant/pliant/graphic/misc/vector.so" "vector_mul_add"
  else
    for (var Int d) 0 n-1
      s d += f*v:d


function vector_apply_grid sdim ddim steps grid src dest -> compute
  arg Int sdim ddim steps ; arg Address grid src dest ; arg Int compute
  if use_dll
    external "/pliant/pliant/graphic/misc/vector.so" "vector_apply_grid"
  else
    var Int base := 0  
    var Int n := 0
    var (Array Int gamut_maximum_dimension) gs
    var (Array Float32 gamut_maximum_dimension) remain
    var Int unit := 1
    for (var Int d) 0 sdim-1
      var Int v := src map uInt8 d
      if v=0
        void
      eif v=255
        base += (steps-1)*unit
      else
        var Int i := min v*(steps-1)\255 steps-2
        gs n := unit
        base += i*unit
        remain n := ( v - i*255\(steps-1) ) / ( (i+1)*255\(steps-1) - i*255\(steps-1) )
        n += 1
      unit *= steps
    for (var Int d) 0 ddim-1
      dest map Float32 d := 0
    for (var Int u) 0 2^n-1
      var Int index := base ; var Float f := 1
      for (var Int d) 0 n-1
        if (u .and. 2^d)<>0
          index += gs d
          f *= remain d
        else
          f *= 1-remain:d
      var Pointer:(Array Float32 gamut_maximum_dimension) p :> (grid translate Float32 index*ddim) map (Array Float32 gamut_maximum_dimension)
      if p:0=undefined
        return index
      for (var Int d) 0 ddim-1
        dest map Float32 d += f*p:d
    compute := -1
  

export vector_mul_add vector_apply_grid