summaryrefslogtreecommitdiff
path: root/src/helper/startup.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'src/helper/startup.tcl')
-rw-r--r--src/helper/startup.tcl24
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} {