Patch title: Release 90 bulk changes
Abstract:
File: /graphic/vfilter/ascii85.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/stream/filesystembase.pli"
module "/pliant/language/stream/multi.pli"


type Ascii85StreamDriver
  field Link:Stream s
  field uInt value ; field Int count
  field uInt32_hi clear ; field Int remain
  field CBool eof
StreamDriver maybe Ascii85StreamDriver

method drv read buf mini maxi -> red
  oarg_rw Ascii85StreamDriver drv ; arg Address buf ; arg Int mini maxi red
  var Link:Stream s :> drv s
  red := 0
  part read
    if drv:remain>0
      var Int step := min drv:remain maxi-red
      memory_copy ((addressof drv:clear) translate Byte uInt32:size-drv:remain) (buf translate Byte red) step
      drv remain -= step
      red += step
    while red<mini and not s:atend and not drv:eof
      s raw_read addressof:(var uInt8 u8) 1
      var Int c := u8
      if c>="!":number and c<="u":number
        drv value := (drv:value .*. 85) .+. c-"!":number
        drv count += 1
        if drv:count=5
          drv clear := drv value ; drv remain := 4
          drv value := 0 ; drv count := 0
          restart read
      eif c="z":number
        drv clear := 0 ; drv remain := 4
        restart read
      eif c="~":number
        if drv:count>1
          drv clear := drv:value .*. (cast 85^(5-drv:count) uInt)
          drv remain := drv:count-1
        s raw_read addressof:(var uInt8 u8) 1 
        drv eof := true
        restart read

method drv query command stream answer -> status
  oarg_rw Ascii85StreamDriver drv ; arg Str command ; arg_rw Stream stream ; arg_w Str answer ; arg ExtendedStatus status 
  status := drv:s:stream_driver query command drv:s answer


type Ascii85FileSystem
  void
FileSystem maybe Ascii85FileSystem

method fs open name options flags stream support -> status
  oarg_rw Ascii85FileSystem fs ; arg Str name options ; arg Int flags ; arg_rw Stream stream support ; arg ExtendedStatus status
  var Link:Ascii85StreamDriver drv :> new Ascii85StreamDriver
  if exists:support
    drv s :> support
  else
    drv s :> new Stream
    drv:s open name options (flags .and. in+out+append+safe)
    if drv:s=failure
      return failure
  drv value := 0 ; drv count := 0
  drv remain := 0
  drv eof := false
  stream stream_driver :> drv
  status := success

gvar Ascii85FileSystem _ascii85_file_system
pliant_multi_file_system mount "ascii85:" "" _ascii85_file_system