Patch title: Release 94 bulk changes
Abstract:
File: /pliant/util/pml/ascii.pli
Key:
    Removed line
    Added line
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "stream.pli"
module "prototype.pli"
module "generic.pli"
module "/pliant/language/data/string_cast.pli"


constant from_index (the_function '. from stream' Universal Stream CBool -> CBool):generic_index

method data from_stream_ stream inc function -> ok
  arg_w Universal data ; arg_rw Stream stream ; arg CBool inc ; arg Function function ; arg CBool ok
  indirect
  
function from_stream adr type stream inc -> ok
  arg Address adr ; arg Type type ; arg_rw Stream stream ; arg CBool inc ok
  var Pointer:Function function :> type get_generic_method from_index
  ok := (adr map Universal) from_stream_ stream inc function


function pml_decode binary ascii options
  arg_rw Stream binary ascii ; arg Str options
  var Int level := 0 ; var CBool detailed := options option "detailed"
  part scan
    while not binary:atend
      var Int size := binary isize
      if detailed
        ascii writechars "("
        if ((binary safe_query "seek") parse (var Intn offset))
          ascii writechars "offset "+string:offset+" "
        ascii writechars "level "+string:level+" header "+(right (string (binary pick_uInt8) "radix 16") 2 "0")+"h size "+string:size+") "
      var Str l := binary ilabel
      ascii writechars l
      if size=undefined
        leave scan
      var Pointer:Type t :> binary itype
      var Arrow a := entry_new t
      binary rewind_open
      from_stream a t binary false
      binary rewind
      binary rewind_close
      if t=Ident
        t :> Str
      var Str v := to_string a t ""
      if v<>""
        ascii writechars " " ; ascii writechars v
      binary forward size
      ascii writeline ""
      if l="open"
        level += 1
      eif l="close"
        level -= 1

function pml_encode ascii binary options
  arg_rw Stream ascii binary ; arg Str options


export pml_decode pml_encode