diff options
Diffstat (limited to 'src/helper/startup.tcl')
-rw-r--r-- | src/helper/startup.tcl | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/helper/startup.tcl b/src/helper/startup.tcl index f11d5b68..cb5fb026 100644 --- a/src/helper/startup.tcl +++ b/src/helper/startup.tcl @@ -10,6 +10,30 @@ proc exit {} { ocd_throw exit } +# All commands are registered with an 'ocd_' prefix, while the "real" +# command is a wrapper that calls this function. Its primary purpose is +# to discard 'handler' command output, +proc ocd_bouncer {name args} { + set cmd [format "ocd_%s" $name] + set type [eval command type $cmd $args] + if {$type == "native"} { + return [eval $cmd $args] + } else {if {$type == "simple"} { + if {[catch {eval $cmd $args}] == 0} { + return "" + } else { + set errmsg "Command handler execution failed" + } + } else {if {$type == "group"} { + catch {eval help $name $args} + set errmsg [format "%s: command requires more arguments" \ + [concat $name " " $args]] + } else { + set errmsg [format "Unknown command type: %s" $type] + }}} + return -code error $errmsg +} + # Try flipping / and \ to find file if the filename does not # match the precise spelling proc find {filename} { |