---- '''globx: Extended globbing, non-recursively walking through directory-trees''' proc globx {startDir {search *} {cb ""}} { set dirStack [list [file normalize $startDir]] set files {} set fc 0 while {[llength $dirStack]} { set newStack {} foreach dir $dirStack { set fn [glob -noc -typ f -dir $dir -- $search] set fh [glob -noc -typ {f hidden} -dir $dir -- $search] if {[string equal $cb ""]} { eval lappend files $fn $fh } else { foreach f [concat $fn $fh] { incr fc uplevel [list $cb $f] } } set dn [glob -noc -typ d -dir $dir *] set dh [glob -noc -typ {d hidden} -dir $dir *] eval lappend newStack $dn $dh } set dirStack $newStack update } if {[string equal $cb ""]} { return [lsort $files] } else { return $fc } } '''Examples:''' '''''Without a callback, directly returning the filenames as a list:''''' puts [globx c:/winnt] puts [globx c:/winnt *.dll] '''''Returning the filenames unsorted name-by-name via callback:''''' proc callback file { puts $file } puts [globx c:/winnt * callback]; # will return the number of files read ---- '''readprof: Reading profiles with custom''' '''''command''''' '''via a slave interpreter'''