target/adi_v5_swd: suppress reconnect in swd_multidrop_select()
[fw/openocd] / src / helper / startup.tcl
index 2e2982cca6903c21bfa30b429878c96492db5272..5a0d479f5e9ed91450affd44957917111f3bf9b1 100644 (file)
@@ -1,40 +1,10 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
 # Defines basic Tcl procs that must exist for OpenOCD scripts to work.
 #
 # Embedded into OpenOCD executable
 #
 
-
-# We need to explicitly redirect this to the OpenOCD command
-# as Tcl defines the exit proc
-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 ocd_command type $cmd $args]
-       if {$type == "native"} {
-               return [eval $cmd $args]
-       } else {if {$type == "simple"} {
-               if {[catch {eval $cmd $args}] == 0} {
-                       return ""
-               } else {
-                       # 'classic' commands output error message as part of progress output
-                       set errmsg ""
-               }
-       } else {if {$type == "group"} {
-               catch {eval ocd_usage $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} {
@@ -53,12 +23,33 @@ proc find {filename} {
 add_usage_text find "<file>"
 add_help_text find "print full path to file according to OpenOCD search rules"
 
-# Run script
+# Find and run a script
 proc script {filename} {
-       source [find $filename]
+       uplevel #0 [list source [find $filename]]
 }
 add_help_text script "filename of OpenOCD script (tcl) to run"
 add_usage_text script "<file>"
 
-#########
+# Run a list of post-init commands
+# Each command should be added with 'lappend post_init_commands command'
+lappend _telnet_autocomplete_skip _run_post_init_commands
+proc _run_post_init_commands {} {
+       if {[info exists ::post_init_commands]} {
+               foreach cmd $::post_init_commands {
+                       eval $cmd
+               }
+       }
+}
+
+# Run a list of pre-shutdown commands
+# Each command should be added with 'lappend pre_shutdown_commands command'
+lappend _telnet_autocomplete_skip _run_pre_shutdown_commands
+proc _run_pre_shutdown_commands {} {
+       if {[info exists ::pre_shutdown_commands]} {
+               foreach cmd $::pre_shutdown_commands {
+                       eval $cmd
+               }
+       }
+}
 
+#########