Richard Suchenwirth 2006-04-05 - A
VFS (virtual filesystem) is an elaborate piece of engineering. This page is not. It's just an experiment in how to map tree-structured data in a kind of filesystem with directories. (The purpose is to provide an analogon to
glob, for opening
Tree nodes for such a structure on demand.) For this, each "directory" is implemented as an array element, which contains its children with full path.
proc mkvfs {_arr data} {
upvar 1 $_arr arr
foreach item $data {
set dir [file dir $item]
if ![info exists arr($dir)] {set arr($dir) {}}
if {$dir ne "/"} {mkvfs arr $dir}
if {[lsearch -exact $arr($dir) $item]<0} {
lappend arr($dir) $item
}
}
}
Test:
set data {
/foo/f1/g1
/foo/f1/g2
/foo/f2/g3
/foo/f2/g4
/bar/b1/hello
/bar/b1/world
/bar/b2/test
/bar/b2/again
}
% mkvfs arr $data
% parray arr
arr(/) = /foo /bar
arr(/bar) = /bar/b1 /bar/b2
arr(/bar/b1) = /bar/b1/hello /bar/b1/world
arr(/bar/b2) = /bar/b2/test /bar/b2/again
arr(/foo) = /foo/f1 /foo/f2
arr(/foo/f1) = /foo/f1/g1 /foo/f1/g2
arr(/foo/f2) = /foo/f2/g3 /foo/f2/g4
SEH 20060405 -- The Tclvfs package has a sample namespace virtual filesystem which uses namespaces to manage the tree-structured file/directory data. It may provide the kind of function you're looking for.
LV I suspect that Richard is not seeking a function, but instead experimenting with how aspects of various advanced features of Tcl could be emulated, in part, in vanilla Tcl.
RJ He's
Playing VFS, IMO.