testing/*.tcl sample & test code
[fw/openocd] / src / startup.tcl
index acf93be4cf4156731215aaacb1bec28ee4713f81..dc3a0895729001693054145838ae171faacf1276 100644 (file)
@@ -5,6 +5,25 @@
 # Embedded into OpenOCD executable
 #
 
+
+# Help text list. A list of command + help text pairs.
+#
+# Commands can be more than one word and they are stored
+# as "flash banks" "help text x x x"
+
+global ocd_helptext
+set ocd_helptext {}
+
+proc add_help_text {cmd cmd_help} {
+       global ocd_helptext
+       lappend ocd_helptext [list $cmd $cmd_help]
+}
+
+proc get_help_text {} {
+       global ocd_helptext
+       return $ocd_helptext
+}
+
 # Production command
 # FIX!!! need to figure out how to feed back relevant output
 # from e.g. "flash banks" command...
@@ -48,6 +67,43 @@ proc flash args {
        openocd_throw "flash $args"
 }
 
+#Print help text for a command. Word wrap
+#help text that is too wide inside column.
+proc help {args} {
+       global ocd_helptext
+       set cmd $args
+       foreach a [lsort $ocd_helptext] {
+               if {[string length $cmd]==0||[string first $cmd $a]!=-1||[string first $cmd [lindex $a 1]]!=-1} {
+                       set w 50
+                       set cmdname [lindex $a 0]
+                       set h [lindex $a 1]
+                       set n 0
+                       while 1 {
+                               if {$n > [string length $h]} {break}
+                               
+                               set next_a [expr $n+$w]
+                               if {[string length $h]>$n+$w} {
+                                       set xxxx [string range $h $n [expr $n+$w]]
+                                       for {set lastpos [expr [string length $xxxx]-1]} {$lastpos>=0&&[string compare [string range $xxxx $lastpos $lastpos] " "]!=0} {set lastpos [expr $lastpos-1]} {
+                                       }
+                                       #set next_a -1
+                                       if {$lastpos!=-1} {
+                                               set next_a [expr $lastpos+$n+1]
+                                       }
+                               }
+                               
+                               
+                               puts [format "%-25s %s" $cmdname [string range $h $n [expr $next_a-1]] ]
+                               set cmdname ""
+                               set n [expr $next_a]
+                       }
+               }
+       }
+}
+
+add_help_text help "Tcl implementation of help command"
+
+
 # If a fn is unknown to Tcl, we try to execute it as an OpenOCD command
 proc unknown {args} {
        if {[string length $args]>0} {