Version 0 of option parsing using ensemble

Updated 2008-08-19 20:48:19 by lars_h
 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]
 }

enter categories here