Patch title: Release 92 bulk changes
Abstract:
File: /graphic/vfilter/prototype.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/stream/openmode.pli"
module "/pliant/language/compiler.pli"
module "/pliant/graphic/draw/prototype.pli"



module "/pliant/graphic/draw/prototype.pli"



method f open stream options h -> status
  oarg_rw DrawPrototype f ; arg_rw Stream stream ; arg Str options ; arg ImagePrototype h ; arg ExtendedStatus status
  generic
  status := failure "Generic draw write open filter called"


method f close -> status
  oarg_rw DrawPrototype f ; arg ExtendedStatus status
  generic
  status := failure "Generic draw write close filter called"

DrawPrototype maybe DrawWriteFilter


private

gvar Dictionary draw_read_filters # extension -> type
private

gvar Dictionary draw_read_filters # extension -> type
gvar Dictionary draw_read_seek
gvar Dictionary draw_write_filters # extension -> type
gvar Dictionary draw_write_filters # extension -> type
gvar Dictionary draw_write_seek


function draw_record_filters ext read_filter write_filter
  arg Str ext ; arg Type read_filter write_filter
function draw_record_filters ext read_filter read_seek write_filter write_seek
  arg Str ext ; arg Type read_filter write_filter ; arg CBool read_seek write_seek
  if read_filter<>Void
    draw_read_filters insert ext true addressof:read_filter
  if read_filter<>Void
    draw_read_filters insert ext true addressof:read_filter
    if read_seek
      draw_read_seek insert ext true addressof:void
  if write_filter<>Void
    draw_write_filters insert ext true addressof:write_filte
  if write_filter<>Void
    draw_write_filters insert ext true addressof:write_filte
    if write_seek
      draw_write_seek insert ext true addressof:void

function draw_read_filter filename -> f
  arg Str filename ; arg Link:DrawReadFilter f
  var Str ext := filename
  ext := ext (ext search_last "/" -1)+1 ext:len
  ext := ext (ext search "." ext:len) ext:len
  var Pointer:Arrow c :> draw_read_filters first ext
  if c=null
    console "There is no read filter for " ext eol
    f :> null map DrawReadFilter
    return
  f :> entry_new:(c map Type) map DrawReadFilter
 

function draw_read_filter filename -> f
  arg Str filename ; arg Link:DrawReadFilter f
  var Str ext := filename
  ext := ext (ext search_last "/" -1)+1 ext:len
  ext := ext (ext search "." ext:len) ext:len
  var Pointer:Arrow c :> draw_read_filters first ext
  if c=null
    console "There is no read filter for " ext eol
    f :> null map DrawReadFilter
    return
  f :> entry_new:(c map Type) map DrawReadFilter
 
function draw_read_flags filename -> flags
  arg Str filename ; arg Int flags
  var Str ext := filename
  ext := ext (ext search_last "/" -1)+1 ext:len
  ext := ext (ext search "." ext:len) ext:len
  flags := shunt (draw_read_seek first ext)<>null seek 0
 
function draw_write_filter filename -> f
  arg Str filename ; arg Link:DrawWriteFilter f
  var Str ext := filename
  ext := ext (ext search_last "/" -1)+1 ext:len
  ext := ext (ext search "." ext:len) ext:len
  var Pointer:Arrow c :> draw_write_filters first ext
  if c=null
    console "There is no write filter for " ext eol
    f :> null map DrawWriteFilter
    return
  f :> entry_new:(c map Type) map DrawWriteFilter

function draw_write_filter filename -> f
  arg Str filename ; arg Link:DrawWriteFilter f
  var Str ext := filename
  ext := ext (ext search_last "/" -1)+1 ext:len
  ext := ext (ext search "." ext:len) ext:len
  var Pointer:Arrow c :> draw_write_filters first ext
  if c=null
    console "There is no write filter for " ext eol
    f :> null map DrawWriteFilter
    return
  f :> entry_new:(c map Type) map DrawWriteFilter


method d load stream options -> status
  oarg_rw DrawPrototype d ; arg_rw Stream stream ; arg Str o
  var Link:DrawReadFilter f :> draw_read_filter (shunt (opti
  if not exists:f
    return (failure "There is no filter for "+stream:name+" 
  status := f load stream options d
function draw_write_flags filename -> flags
  arg Str filename ; arg Int flags
  var Str ext := filename
  ext := ext (ext search_last "/" -1)+1 ext:len
  ext := ext (ext search "." ext:len) ext:len
  flags := shunt (draw_write_seek first ext)<>null seek 0
 
 
method d load filename options -> status
  oarg_rw DrawPrototype d ; arg Str filename options ; arg E
  var Link:Stream s :> new Stream
  if (s open filename options in+safe+anyeol)=failure
    return (failure "Failed to open "+filename)
  status := d load s options
  if s=failure
    status := failure filename+" is corrupted"
export draw_record_filters
export draw_read_filter draw_read_flags
export draw_write_filter draw_write_flags



export draw_record_filters draw_read_filter draw_write_filte
export '. load'