diff --git a/src/scripting.txt b/src/scripting.txt index fa7b94c3f..059bc85ad 100644 --- a/src/scripting.txt +++ b/src/scripting.txt @@ -1,15 +1,5 @@ Plan for hosted scripting support in OpenOCD ============================================ -Jim Tcl support in OpenOCD currently exists as a patch. - -There has been some discussion on the list as to what -purpose scripting support might serve in OpenOCD. - -Also Lua was proposed as a scripting language, but -only Jim Tcl has been forwarded as a patch. - -Tcl is also backwards syntax compatible with OpenOCD -commands. What scripting will not do ========================== @@ -26,6 +16,10 @@ Since end users are not expected to mess with the scripting language, the choice of language is not terribly important to those same end users. +Jim Tcl was chosen as it was easy to integrate, works +great in an embedded environment and Øyvind Harboe +had experience with it. + Uses of scripting ================= Default implementation of procedures in tcl/procedures.tcl. @@ -46,3 +40,15 @@ Default implementation of procedures in tcl/procedures.tcl. and will have no externally visible consequences. Tcl has an advantage in that it's syntax is backwards compatible with the current OpenOCD syntax. +- external scripting. Low level tcl functions will be defined + that return machine readable output. These low level tcl + functions constitute the tcl api. flash_banks is such + a low level tcl proc. "flash banks" is an example of + a command that has human readable output. The human + readable output is expected to change inbetween versions + of OpenOCD. The output from flash_banks may not be + in the preferred form for the client. The client then + has two choices a) parse the output from flash_banks + or b) write a small piece of tcl to output the + flash_banks output to a more suitable form. The latter may + be simpler. \ No newline at end of file diff --git a/src/tcl/commands.tcl b/src/tcl/commands.tcl index a25badcc8..1da8f1b2a 100644 --- a/src/tcl/commands.tcl +++ b/src/tcl/commands.tcl @@ -34,25 +34,22 @@ 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" +} + # If a fn is unknown to Tcl, we try to execute it as an OpenOCD command proc unknown {args} { - - # This is uglier than it needs to be since the "flash banks" is really - # a single command. For now only "flash banks" has been converted from - # C to Tcl as an example, but if we do decide to go down this path, then - # some more generic scheme will be put in place here. - # - # Help texts need a makeover. There needs to be help texts for - # tcl procs + perhaps some work w.r.t. making the help command - # format things prettier. - if {[string compare [lindex $args 0] flash]==0 && [string compare [lindex $args 1] banks]==0} { - return [flash_banks_pretty] - } - - # We print out as we run the command if {[string length $args]>0} { - openocd_throw "$args" + openocd_throw $args } + # 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.