summaryrefslogtreecommitdiff
path: root/src/startup.tcl
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-07-17 08:34:14 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-07-17 08:34:14 +0000
commit44928321e6d4d67bcb3da7022ff9d23e0c8ee78b (patch)
treeea659ff38e179ee9b2513664a7dbf4958ba37e56 /src/startup.tcl
parent6af107855dd590a054b7bd610dadf3f7210c352c (diff)
downloadopenocd+libswd-44928321e6d4d67bcb3da7022ff9d23e0c8ee78b.tar.gz
openocd+libswd-44928321e6d4d67bcb3da7022ff9d23e0c8ee78b.tar.bz2
openocd+libswd-44928321e6d4d67bcb3da7022ff9d23e0c8ee78b.tar.xz
openocd+libswd-44928321e6d4d67bcb3da7022ff9d23e0c8ee78b.zip
Charles Hardin <ckhardin@gmail.com> and Øyvind Harboe
This patch just uses the command.c interface to create tcl commands for the root level commands and avoids a bit of the "TCL" bleed into the rest of the openocd code. Multilevel commands also supported. git-svn-id: svn://svn.berlios.de/openocd/trunk@818 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/startup.tcl')
-rw-r--r--src/startup.tcl50
1 files changed, 23 insertions, 27 deletions
diff --git a/src/startup.tcl b/src/startup.tcl
index abdf58ff..11ffe851 100644
--- a/src/startup.tcl
+++ b/src/startup.tcl
@@ -11,8 +11,6 @@
# Commands can be more than one word and they are stored
# as "flash banks" "help text x x x"
-set ocd_helptext {}
-
proc add_help_text {cmd cmd_help} {
global ocd_helptext
lappend ocd_helptext [list $cmd $cmd_help]
@@ -39,10 +37,10 @@ proc board_test {} {
# Show flash in human readable form
# This is an example of a human readable form of a low level fn
-proc flash_banks_pretty {} {
+proc flash_banks {} {
set i 0
set result ""
- foreach {a} [flash_banks] {
+ foreach {a} [openocd_flash_banks] {
if {$i > 0} {
set result "$result\n"
}
@@ -58,14 +56,6 @@ proc exit {} {
openocd_throw exit
}
-# We have currently converted only "flash banks" to tcl.
-proc flash args {
- if {[string compare [lindex $args 0] banks]==0} {
- return [flash_banks_pretty]
- }
- openocd_throw "flash $args"
-}
-
#Print help text for a command. Word wrap
#help text that is too wide inside column.
proc help {args} {
@@ -103,24 +93,30 @@ proc help {args} {
add_help_text help "Tcl implementation of help command"
+#a bit of backwards compatibility
+proc openocd_throw {cmd} {
+ return [eval $cmd]
+}
+
+#a bit of backwards compatibility
+proc openocd {cmd} {
+ return [eval $cmd]
+}
+
# If a fn is unknown to Tcl, we try to execute it as an OpenOCD command
+#
+# We also support two level commands. "flash banks" is translated to
+# flash_banks
proc unknown {args} {
- if {[string length $args]>0} {
- set cmd ""
- # We need to add back quotes for arguments w/space
- # for args without space, we can add quotes anyway
- foreach {a} $args {
- set cmd "$cmd \"$a\""
- }
- openocd_throw $cmd
+ # do the name mangling from "flash banks" to "flash_banks"
+ if {[llength $args]>=2} {
+ set cmd_name "[lindex $args 0]_[lindex $args 1]"
+ # Fix?? add a check here if this is a command?
+ # we'll strip away args until we fail anyway...
+ return [eval "$cmd_name [lrange $args 2 end]"]
}
- # openocd_throw outputs while running and also sets the
- # primary return value to the output of the command
- #
- # The primary return value have been set by "openocd" above,
- # so we need to clear it, lest we print out the output from
- # the command twice.
- return ""
+ # This really is an unknown command.
+ puts "Unknown command: $args"
}