summaryrefslogtreecommitdiff
path: root/src/helper/command.c
Commit message (Collapse)AuthorAgeFilesLines
* helper: fix flaky capture commandØyvind Harboe2010-09-201-0/+16
| | | | | | | | | | | capture of progress output would get polling results. This will break in the example below where polling output would override the tcl return value. capture {sleep 10000; set abc def} Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
* command: capture command now handles both types commandsØyvind Harboe2010-09-111-2/+24
| | | | | | | | | | | | | | | | | | | | | | Commands that output progress output and no return value will have the progress output captured. Commands that do not output progress output(tcl commands) will return the tcl return value instead. The advantage here is that it is no longer necessary to consider which command one is capturing, it works for either. Example #1: capture progress output: set foo [capture help] Example #2: capture tcl return value set foo [capture {set abc def}] Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
* don't add confusing source info to JimAndreas Fritiofson2010-06-181-2/+2
| | | | | | | | | | | | | When an interactive command fails, the Jim stack trace prints references to the line in "command.c" where the interpreter was invoked. Since that location has no relation to the actual command that failed, the information serves only to add confusion. By not adding the useless source info to Jim the noise can be reduced, while still printing a useful trace for nested commands. Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
* command context: fix errors when running certain commands on startupØyvind Harboe2010-05-051-2/+6
| | | | | | | | | | | Various commands, e.g. "arm mcr xxxx" would fail if invoked upon startup since it there was no command context defined for the jim interpreter in that case. A Jim interpreter is now associated with a command context(telnet, gdb server's) or the default global command context. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
* CMD: duplicate cmd error msgSpencer Oliver2010-02-041-1/+4
| | | | | | | | | When registering cmds we report duplicate attempts to register a cmd as a LOG_ERROR. Some situations need this, such as when registering dual flash banks. http://www.mail-archive.com/openocd-development@lists.berlios.de/msg11152.html Signed-off-by: Spencer Oliver <ntfreak@users.sourceforge.net>
* debug: make logging of commands terserØyvind Harboe2010-01-131-2/+11
| | | | | | one line / command instead of one line per argument. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
* commands: make error messages a bit more terseØyvind Harboe2010-01-111-1/+1
| | | | | | | we don't need to know the build path of command.c when reading normal user level error messages. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
* FreeBSD build fixesDavid Brownell2010-01-101-0/+3
| | | | | | | | | | Based on notes from Tomek Cedro <tomek.cedro@gmail.com> and Steve Franks <bahamasfranks@gmail.com>. In the User's Guide, sort the list of operating systems reported through Tcl with $ocd_HOSTOS ... and include FreeBSD. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
* src/helper: usage/help updatesDavid Brownell2010-01-091-23/+31
| | | | | | | | | | Make "usage" messages use the same EBNF as the User's Guide; no angle brackets. Improve and correct various helptexts. Don't use "&function"; a function's name is its address. Fix some whitespace glitches, shrink a few overlong lines. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
* buildfix on MacOSMasaki Muranaka2010-01-091-2/+2
| | | | | | | | | | Recent Apple gcc versions use __APPLE__ instead of __DARWIN__; accept that too. Also use #warning, not #warn; neither is standard, but most CPP versions require it to be spelled out. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
* streamline and document helptext mode displaysDavid Brownell2010-01-021-10/+22
| | | | | | | | | | | | | | | | | | | Most commands are usable only at runtime; so don't bother saying that, it's noise. Moreover, tokens like EXEC are cryptic. Be more clear: highlight only the commands which may (also) be used during the config stage, thus matching the docs more closely. There are - Configuration commands (per documentation) - And also some commands that valid at *any* time. Update the docs to note that "help" now shows this mode info. This also highlighted a few mistakes in command configuration, mostly commands listed as "valid at any time" which shouldn't have been. This just fixes ones I noted when sanity testing. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
* Fix usage/help search for subcommands.Dean Glazeski2010-01-021-7/+34
| | | | | | | | This makes it so that the usage/help command properly uses the whole command, including subcommand, in the search for help information. This previously caused erroneous output from the usage command handler. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
* Add the current command to the command informationDean Glazeski2010-01-021-0/+1
| | | | | | | | | | | I wanted to make it so I can be ignorant of a commands invocation string, so I tried to use CMD_CURRENT (aka cmd->current) which is supposed to house a pointer to the current command.  It turns out that this wasn't being set. This patch adds the current command structure to the command invocation structure before sending it along to the command handler. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
* help: list all commands that match stringOyvind Harboe2009-12-211-21/+35
| | | | | | | Restore behavior where help lists all commands that match string passed to help. Signed-off-by: Oyvind Harboe <oyvind.harboe@zylin.com>
* change #include "target.h" to <target/target.h>Zachary T Welch2009-12-031-1/+1
| | | | | | | | | | | | Changes from the flat namespace to heirarchical one. Instead of writing: #include "target.h" the following form should be used. #include <target/target.h> The exception is from .c files in the same directory.
* command: the Jim interpreter can now be provided rather than createdØyvind Harboe2009-12-011-7/+11
| | | | | | | In embedded hosts, the Jim interpreter can come from the existing context rather than be created by OpenOCD. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
* improve command prohibition error reportZachary T Welch2009-11-301-2/+10
| | | | | | Ensures that the correct information gets displayed, depending on the mode of the command being denied. Fixes misreporting all commands as needing to run "before 'init'".
* remove interp global variable!Zachary T Welch2009-11-301-18/+20
| | | | | | | Finish removing references to the 'interp' global variable from the command module, encapsulating all reference via command_context. Eliminates use of the global entirely, so it can be removed. Hurrah!
* command output capture: do not use interp globalZachary T Welch2009-11-301-15/+34
| | | | | | Adds a log_capture_state structure to pass to the log capture callback used by the command module. Ensures that the capture occurs in the proper context.
* do not extern 'interp' from command.cZachary T Welch2009-11-301-1/+1
| | | | | Adds 'interp' field to command_context, chasing the few remaining references to the global variable outside of the command module.
* make syntax errors respond with 'usage'Zachary T Welch2009-11-301-3/+3
| | | | | | The 'help' text will become more verbose, so its entire text will be far more than desired when you only borked your syntax. The usage still allows the commands to be looked up for more help.
* improve command_done() API and docsZachary T Welch2009-11-301-4/+4
| | | | | | | | | | | | | | | | | | command_done() does not need to return an error, but it needed Doxygen comment. Provide some for copy_command_context as well. Note: this audit revealed some potential bugs with the command context implementation. There was a reason that commands were added at the end of the list. Shallow copying of command_context means that the list is shared between them. And commands added at the top-level before the pre-existing commands will not be available in the shared context as they were before. Yikes! Fortunately, this does not seem to occur in general use, as 'add_help_text' gets registered in startup.tcl and claims the first slot in my own test cases. Thus, it seems that we have been masking the issue for now, but it shows the need for further architectural improvement in the core command module.
* only display usable commands in helpZachary T Welch2009-11-301-0/+3
| | | | | | | With the ability to defer 'init', users can access the help system while still in CONFIG mode. This patch omits commands from the help and usage list when they cannot be run in the current command mode, making it much easier to see what can be done at a given time.
* add error checking in command_newZachary T Welch2009-11-281-20/+30
| | | | | | Adds checks for memory allocation failures. Started to use calloc() instead of malloc()/memset(), but I got carried away. This kind of work should be done throughout the tree, but it's almost hopeless at present.
* include mode information in help text.Zachary T Welch2009-11-281-3/+27
| | | | | Extends the help output to list the valid modes for each commands. Fixes a memory leak of the returned command_name() string.
* refactor command mode detectionZachary T Welch2009-11-281-2/+7
| | | | | | | | | | | Splits the check for a command's ability to run into a helper. This also fixes a bug whereby commands that specified COMMAND_EXEC were allowed to run during the configuration stage. This allowed problematic commands to be called before 'init', defeating the intention of specifying that command mode. With this change, the run_command() helper denies access to handlers that should run only after 'init' during the configuration stage.
* add command private data setter/accessorZachary T Welch2009-11-281-0/+8
| | | | | | | | | | Presently, commands registration taks a static handler data pointer. This patch adds support for commands that require a dynamic pointer, such as those registered in a dynamic context (e.g. subcommands for a user-created 'foo.cpu' command). The command_set_handler_data will update a command (group) to use a new context pointer, while the CMD_DATA macro allows command handlers to access the value. Jim handlers should find this value in interp->cmdPrivData.
* add 'command mode' introspective handlerZachary T Welch2009-11-281-0/+39
| | | | | Allows scripts to behave different depending on the current mode. Also allows introspection of the mode required for commands.
* remove unknown handlerZachary T Welch2009-11-281-34/+36
| | | | | | | | | | | | | | Updates command registration to provide top-level handlers for all commands, rather than falling back onto the 'unknown' command. Instead, that same handler is registered for placeholders, providing the same functionality under the root verb command name instead. This permits users to implement their own 'unknown' function, and it resolves some mind-bending breakage related to function object lookup while recursing. Changes 'ocd_bounce' to call 'ocd_command' and 'ocd_help' from the wrapper directly, rather than bouncing through their wrappers. This prevents endless recursion caused by the above changes, whereby the 'command' wrapper's type check would blow the stack to hell and gone.
* improve command handler wrapper scriptZachary T Welch2009-11-281-3/+2
| | | | | | | | | | Adds 'ocd_bouncer' in startup.tcl that is called as a helper for all command handlers, shrinking the embedded C wrapper to a mere stub. Jim handlers are called directly, simple handlers get called with the wrapper to capture and discard their output on error, and placeholders call help directly (though the unknown handler still does this too). It attempts to improve the quality of the error messages as well.
* add 'command type' introspective handlerZachary T Welch2009-11-281-0/+43
| | | | | | | | Adds the 'command' group handler, with the 'type' command producing a string that tells whether the given command is 'native' (for Jim-based command handlers), 'simple' (for simple built-in commands), 'group' for command group placeholders, and 'unknown' if not found in the command registration tables (e.g. core built-ins functions).
* fix regression causing duplicated outputZachary T Welch2009-11-271-13/+28
| | | | | | | | | | | | | | | | | | | | | | | | The command refactoring caused subcommand handlers to produce duplicate output when run. The problem was introduced by failing to ensure all such invocations went through a top-level "catcher" script, prefixing the command name with the 'ocd_' prefix and consuming its results. The fix is to ensure such a top-level "catcher" script gets created for each top-level command, regardless of whether it has a handler. Indeed, this patch removes all command registrations for sub-commands, which would not have worked in the new registration scheme anyway. For now, dispatch of subcommands continues to be handled by the new 'unknown' command handler, which gets fixed here to strip the 'ocd_' prefix if searching for the top-level command name fails initially. Some Jim commands may be registered with this prefix, and that situation seems to require the current fallback approach. Otherwise, that prefix could be stripped unconditionally and the logic made a little simpler. The same problem must be handled by the 'help' command handler too, so its lookup process works as intended. Overall, the command dispatching remains more complicated than desired, but this patch fixes the immediate regressions.
* add script_command_run helperZachary T Welch2009-11-251-26/+19
| | | | | Eliminates duplicated code in script_command and handle_unknown_command. Fixes bug with duplicated help output generated by placeholder commands.
* encapsulate and re-use log capture, retval setupZachary T Welch2009-11-251-49/+43
| | | | | | | | | Factors log capture while running script commands, eliminating duplicated code between script_command and jim_capture. Factors setting a command's Jim "retval" into a new helper as well. Using these new helpers in the new unknown command handler's fixes possible regressions caused by these bits being missing.
* combine help and usage command handlersZachary T Welch2009-11-251-20/+8
| | | | Remove duplicated handler code by checking the running command name.
* improve usage and help command outputZachary T Welch2009-11-241-10/+38
| | | | | Rewrite formatting code in C, removing last remenants of TCL help code. Sinificantly improves the readability by using smarter indent and wrap.
* allow scripts to update usage informationZachary T Welch2009-11-241-4/+32
| | | | | | The add_usage_text command uses the same C handler, which was updated to support its new polymorphic role. This patch updates the two script commands that needed this support: 'find' and 'script'.
* add jim_handler to command_registrationZachary T Welch2009-11-241-20/+22
| | | | | | Adding jim_handler field to command_registration allows removing the register_jim helper. All command registrations now go through the register_command{,s}() functions.
* refactor command_new to use command_registrationZachary T Welch2009-11-241-12/+10
| | | | Save stack space: use a struct. Makes it easier to add new parameters.
* rewrite 'unknown' command dispatching in CZachary T Welch2009-11-241-0/+65
| | | | | Rewrite the magical 'unknown' command in C as a Jim handler, allowing it to dispatch commands to any level in the tree.
* add public API for locating commandsZachary T Welch2009-11-241-0/+10
| | | | | Allow other modules to find a command, primarily for the purpose of registering and unregistering subcommands.
* refactor script_command context grabbingZachary T Welch2009-11-241-12/+16
| | | | Move command context acquisition to current_command_context() for re-use.
* add command registration chainingZachary T Welch2009-11-241-6/+24
| | | | | | | | | Adds the ability to chain registration structures. Modules can define a command with the 'chain' and 'num_chain' fields defined in their registration table, and the register_commands() function will initialize these commands. If the registration record creates a new command, then the chained commands are created under it; otherwise, they are created in the same context as the other commands (i.e. the parent argument).
* more command registration refactoringZachary T Welch2009-11-241-16/+38
| | | | | Split out the handler registration into its own function, and add a few obviously missing NULL pointer error checking.
* command: use register_commands for handlersZachary T Welch2009-11-241-17/+34
| | | | | | Use register_commands() to register low-level command handlers, adding a builtin_command_handlers declaration that is easy to understand. Splits help and usage information into their appropriate fields.
* add command usage, separate from helpZachary T Welch2009-11-241-14/+49
| | | | | | Adds the usage command, to display usage information for commands. The output for this command will remain erronenously empty until commands are updated to use these new coventions.
* add register_commands for batch registrationZachary T Welch2009-11-241-0/+17
| | | | | | The register_commands API takes multiple commands in one call, allowing modules to declare and pass a much simpler (and more explicit) array of command_registration records.
* add struct command_registrationZachary T Welch2009-11-241-7/+10
| | | | | | | | | Add a structure to encapsulate command registration information, rather than passing them all as parameters. Enables further API changes that require additional required or optional parameters. Updates the register_command API and COMMAND_REGISTER macro to use it, along with their documentation.
* use COMMAND_REGISTER macroZachary T Welch2009-11-241-3/+3
| | | | | Replaces direct calls to register_command() with a macro, to allow its parameters to be changed and callers updated in phases.
* maintain command lists in sorted orderZachary T Welch2009-11-201-7/+17
| | | | | Use insertion sort to the command link lists. The only practical effect of this is to order the output of the new 'help' command.