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
This commit is contained in:
oharboe
2008-07-17 08:34:14 +00:00
parent 6af107855d
commit 44928321e6
8 changed files with 178 additions and 331 deletions

View File

@@ -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"
}