proc globby {args} {
array set Opt {complain 1 tails 0}
set patterns [namespace eval globby_parse [list globby] $args]
# Do actual operation...
list [array get Opt] $patterns
}
namespace eval globby_parse {
namespace export -*
proc -directory {directory args} {
upvar 2 Opt Opt
set Opt(dir) $directory
uplevel 1 [list globby {*}$args]
}
proc -join {args} {
list [join $args [file separator]]
}
proc -nocomplain {args} {
upvar 2 Opt Opt
set Opt(complain) 0
uplevel 1 [list globby {*}$args]
}
proc -path {pathPrefix args} {
upvar 2 Opt Opt
set Opt(path) $pathPrefix
uplevel 1 [list globby {*}$args]
}
proc -tails {args} {
upvar 2 Opt Opt
set Opt(tails) 1
uplevel 1 [list globby {*}$args]
}
proc -types {D typeList args} {
upvar 2 Opt Opt
set Opt(types) $typeList
uplevel 1 [list globby {*}$args]
}
proc -- {args} {return $args}
proc unknown {cmd opt args} {
if {[string match -* $opt]} then {
return -code error\
"bad option \"$opt\": must be -directory, -join,\
-nocomplain, -path, -tails, -types, or --"
} else {
list [namespace which --] $opt
}
}
namespace ensemble create -command [namespace current]::globby\
-unknown [namespace which unknown]
}