You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

88 lines
3.9 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2005 by Dominic Rath *
  3. * Dominic.Rath@gmx.de *
  4. * *
  5. * This program is free software; you can redistribute it and/or modify *
  6. * it under the terms of the GNU General Public License as published by *
  7. * the Free Software Foundation; either version 2 of the License, or *
  8. * (at your option) any later version. *
  9. * *
  10. * This program is distributed in the hope that it will be useful, *
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  13. * GNU General Public License for more details. *
  14. * *
  15. * You should have received a copy of the GNU General Public License *
  16. * along with this program; if not, write to the *
  17. * Free Software Foundation, Inc., *
  18. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
  19. ***************************************************************************/
  20. #ifndef COMMAND_H
  21. #define COMMAND_H
  22. #include <stdio.h>
  23. enum command_mode
  24. {
  25. COMMAND_EXEC,
  26. COMMAND_CONFIG,
  27. COMMAND_ANY,
  28. };
  29. typedef struct command_context_s
  30. {
  31. enum command_mode mode;
  32. struct command_s *commands;
  33. int current_target;
  34. /* Execute a command.
  35. *
  36. * If the command fails, it *MUST* return a value != ERROR_OK
  37. * (many commands break this rule, patches welcome!)
  38. *
  39. * This is *especially* important for commands such as writing
  40. * to flash or verifying memory. The reason is that those commands
  41. * can be used by programs to determine if the operation succeded
  42. * or not. If the operation failed, then a program can try
  43. * an alternative approach.
  44. *
  45. * Returning ERROR_COMMAND_SYNTAX_ERROR will have the effect of
  46. * printing out the syntax of the command.
  47. */
  48. int (*output_handler)(struct command_context_s *context, const char* line);
  49. void *output_handler_priv;
  50. } command_context_t;
  51. typedef struct command_s
  52. {
  53. char *name;
  54. struct command_s *parent;
  55. struct command_s *children;
  56. int (*handler)(struct command_context_s *context, char* name, char** args, int argc);
  57. enum command_mode mode;
  58. char *help;
  59. int unique_len;
  60. struct command_s *next;
  61. } command_t;
  62. extern command_t* register_command(command_context_t *context, command_t *parent, char *name, int (*handler)(struct command_context_s *context, char* name, char** args, int argc), enum command_mode mode, char *help);
  63. extern int unregister_command(command_context_t *context, char *name);
  64. extern int unregister_all_commands(command_context_t *context);
  65. extern void command_set_output_handler(command_context_t* context, int (*output_handler)(struct command_context_s *context, const char* line), void *priv);
  66. extern command_context_t* copy_command_context(command_context_t* context);
  67. extern command_context_t* command_init();
  68. extern int command_done(command_context_t *context);
  69. extern void command_print(command_context_t *context, char *format, ...);
  70. extern void command_print_sameline(command_context_t *context, char *format, ...);
  71. extern int command_run_line(command_context_t *context, char *line);
  72. extern int command_run_linef(command_context_t *context, char *format, ...);
  73. extern int command_run_line_internal(command_context_t *context, char *line);
  74. extern void command_output_text(command_context_t *context, const char *data);
  75. #define ERROR_COMMAND_CLOSE_CONNECTION (-600)
  76. #define ERROR_COMMAND_SYNTAX_ERROR (-601)
  77. #define ERROR_COMMAND_NOTFOUND (-602)
  78. extern int fast_and_dangerous;
  79. #endif /* COMMAND_H */