Patch title: Release 94 bulk changes
Abstract:
File: /pliant/util/pml/stream.pli
Key:
    Removed line
    Added line
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"


method s read_uInt8 -> u
  arg_rw Stream s ; arg Int u
  if s:stream_read_cur<>s:stream_read_stop or not s:atend
    u := s:stream_read_cur map uInt8
    s stream_read_cur := s:stream_read_cur translate Byte 1
  else
    u := 0

method s write_uInt8 u
  arg_rw Stream s ; arg Int u
  if s:stream_write_cur<>s:stream_write_stop
    s:stream_write_cur map uInt8 := u
    s stream_write_cur := s:stream_write_cur translate Byte 1
  else
    var uInt8 u8 := u ; s raw_write addressof:u8 1


method s forward size -> status
  arg_rw Stream s ; arg Int size ; arg Status status
  if (cast s:stream_read_stop Int).-.(cast s:stream_read_cur Int)>=size
    s stream_read_cur := s:stream_read_cur translate Byte size
    status := success
  else
    var Int remain := size
    while remain<>0 and { s read_available (var Address adr) (var Int step) remain ; step<>0 }
      remain -= step
    status := shunt remain=0 success failure
    

method s pick_uInt8 -> u
  arg_rw Stream s ; arg Int u
  if s:stream_read_cur<>s:stream_read_stop or not s:atend
    u := s:stream_read_cur map uInt8
  else
    u := 0


method s pick skip buffer size -> status
  arg_rw Stream s ; arg Int skip ; arg Address buffer ; arg Int size ; arg Status status
  if (cast s:stream_read_stop Int).-.(cast s:stream_read_cur Int)>=skip+size
    memory_copy (s:stream_read_cur translate Byte skip) buffer size
    status := success
  else
    s rewind_open
    s forward size
    s raw_read buffer size
    s rewind
    s rewind_close
    status := cast s Status


if false
  method s pick_different skip buffer size -> diff
    arg_rw Stream s ; arg Int skip ; arg Address buffer ; arg Int size ; arg CBool diff
    if (cast s:stream_read_stop Int).-.(cast s:stream_read_cur Int)>=skip+size
      diff := memory_different (s:stream_read_cur translate Byte skip) size buffer size
    else
      s rewind_open
      s forward size
      var Int offset := 0 ; diff := false
      while offset<size and not diff
        s read_available (var Address adr) (var Int step) size-offset
        if step=0
          diff := true
        else
          diff := memory_different adr step (buffer translate Byte offset) step
        offset += step
      s rewind
      s rewind_close


export '. read_uInt8' '. write_uInt8'
export '. forward' '. pick_uInt8' '. pick'