Patch title: Release 93 bulk changes
Abstract:
File: /language/stream/multi.pli
Key:
    Removed line
    Added line
   
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


method mfs list path options flags files -> supported_flags
  oarg_rw MultiFileSystem mfs ; arg Str path options ; arg I
  if path:len>0 and path:0="[dq]" and (path parse (var Str p
    var Pointer:Arrow cur :> files last
    supported_flags := mfs list path2 opt+(shunt opt:len<>0 
    if cur<>null
      cur :> files next cur
    else
      cur :> files first
    while cur<>null
      var Pointer:FileInfo info :> cur map FileInfo
      info name := (string info:name)+(shunt opt<>"" " " "")
      cur :> files next cur
    return
  supported_flags := flags
  var Pointer:Arrow cur :> mfs:mount_points:first
  while cur<>null
    check (addressof entry_type:cur)=addressof:MultiFileSyst
    var Pointer:MultiFileSystemMountPoint mp :> cur map Mult
    if (path 0 mp:from:len)=mp:from
      var List files2 := var List empty_list
      var Int supported := mp:file_system list mp:to+(path m
      supported_flags := supported_flags .and. supported
      var Pointer:Arrow c :> files2 first
      while c<>null
        check (addressof entry_type:c)=addressof:FileInfo   
        var Pointer:FileInfo f :> c map FileInfo
        check (f:name 0 mp:to:len)=mp:to
        f:name := mp:from + (f:name mp:to:len f:name:len)
        files append addressof:f
        c :> files2 next c
    eif path=(mp:from 0 path:len)
      var Str remain := mp:from path:len mp:from:len
      if (remain search "/" remain:len-1)=remain:len-1
        var Link:FileInfo fi :> new FileInfo
        fi name := mp from
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


method mfs list path options flags files -> supported_flags
  oarg_rw MultiFileSystem mfs ; arg Str path options ; arg I
  if path:len>0 and path:0="[dq]" and (path parse (var Str p
    var Pointer:Arrow cur :> files last
    supported_flags := mfs list path2 opt+(shunt opt:len<>0 
    if cur<>null
      cur :> files next cur
    else
      cur :> files first
    while cur<>null
      var Pointer:FileInfo info :> cur map FileInfo
      info name := (string info:name)+(shunt opt<>"" " " "")
      cur :> files next cur
    return
  supported_flags := flags
  var Pointer:Arrow cur :> mfs:mount_points:first
  while cur<>null
    check (addressof entry_type:cur)=addressof:MultiFileSyst
    var Pointer:MultiFileSystemMountPoint mp :> cur map Mult
    if (path 0 mp:from:len)=mp:from
      var List files2 := var List empty_list
      var Int supported := mp:file_system list mp:to+(path m
      supported_flags := supported_flags .and. supported
      var Pointer:Arrow c :> files2 first
      while c<>null
        check (addressof entry_type:c)=addressof:FileInfo   
        var Pointer:FileInfo f :> c map FileInfo
        check (f:name 0 mp:to:len)=mp:to
        f:name := mp:from + (f:name mp:to:len f:name:len)
        files append addressof:f
        c :> files2 next c
    eif path=(mp:from 0 path:len)
      var Str remain := mp:from path:len mp:from:len
      if (remain search "/" remain:len-1)=remain:len-1
        var Link:FileInfo fi :> new FileInfo
        fi name := mp from
        fi status := failure
        fi status := success
        fi size := undefined
        fi datetime := undefined
        files append addressof:fi
        supported_flags := 0
    cur :> mfs:mount_points next cur
  


export MultiFileSystem pliant_os_file_system pliant_multi_fi
        fi size := undefined
        fi datetime := undefined
        files append addressof:fi
        supported_flags := 0
    cur :> mfs:mount_points next cur
  


export MultiFileSystem pliant_os_file_system pliant_multi_fi