1e93f7393Sniklas /* Header file for command-reading library command.c. 2b725ae77Skettenis 3b725ae77Skettenis Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1999, 463addd46Skettenis 2000, 2002, 2004 Free Software Foundation, Inc. 5e93f7393Sniklas 6e93f7393Sniklas This program is free software; you can redistribute it and/or modify 7e93f7393Sniklas it under the terms of the GNU General Public License as published by 8e93f7393Sniklas the Free Software Foundation; either version 2 of the License, or 9e93f7393Sniklas (at your option) any later version. 10e93f7393Sniklas 11e93f7393Sniklas This program is distributed in the hope that it will be useful, 12e93f7393Sniklas but WITHOUT ANY WARRANTY; without even the implied warranty of 13e93f7393Sniklas MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14e93f7393Sniklas GNU General Public License for more details. 15e93f7393Sniklas 16e93f7393Sniklas You should have received a copy of the GNU General Public License 17e93f7393Sniklas along with this program; if not, write to the Free Software 18b725ae77Skettenis Foundation, Inc., 59 Temple Place - Suite 330, 19b725ae77Skettenis Boston, MA 02111-1307, USA. */ 20e93f7393Sniklas 21e93f7393Sniklas #if !defined (COMMAND_H) 22e93f7393Sniklas #define COMMAND_H 1 23e93f7393Sniklas 24b725ae77Skettenis /* Command classes are top-level categories into which commands are broken 25b725ae77Skettenis down for "help" purposes. 26b725ae77Skettenis Notes on classes: class_alias is for alias commands which are not 27b725ae77Skettenis abbreviations of the original command. class-pseudo is for 28b725ae77Skettenis commands which are not really commands nor help topics ("stop"). */ 29b725ae77Skettenis 30b725ae77Skettenis enum command_class 31b725ae77Skettenis { 32b725ae77Skettenis /* Special args to help_list */ 33b725ae77Skettenis class_deprecated, all_classes = -2, all_commands = -1, 34b725ae77Skettenis /* Classes of commands */ 35b725ae77Skettenis no_class = -1, class_run = 0, class_vars, class_stack, 36b725ae77Skettenis class_files, class_support, class_info, class_breakpoint, class_trace, 37b725ae77Skettenis class_alias, class_obscure, class_user, class_maintenance, 38b725ae77Skettenis class_pseudo, class_tui, class_xdb 39b725ae77Skettenis }; 40b725ae77Skettenis 41b725ae77Skettenis /* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum 42b725ae77Skettenis cmd_types'' can be moved from "command.h" to "cli-decode.h". */ 43e93f7393Sniklas /* Not a set/show command. Note that some commands which begin with 44e93f7393Sniklas "set" or "show" might be in this category, if their syntax does 45e93f7393Sniklas not fall into one of the following categories. */ 46b725ae77Skettenis typedef enum cmd_types 47b725ae77Skettenis { 48e93f7393Sniklas not_set_cmd, 49e93f7393Sniklas set_cmd, 50e93f7393Sniklas show_cmd 51b725ae77Skettenis } 52b725ae77Skettenis cmd_types; 53e93f7393Sniklas 54e93f7393Sniklas /* Types of "set" or "show" command. */ 55b725ae77Skettenis typedef enum var_types 56b725ae77Skettenis { 57e93f7393Sniklas /* "on" or "off". *VAR is an integer which is nonzero for on, 58e93f7393Sniklas zero for off. */ 59e93f7393Sniklas var_boolean, 60b725ae77Skettenis 61b725ae77Skettenis /* "on" / "true" / "enable" or "off" / "false" / "disable" or 62b725ae77Skettenis "auto. *VAR is an ``enum auto_boolean''. NOTE: In general a 63b725ae77Skettenis custom show command will need to be implemented - one that for 64b725ae77Skettenis "auto" prints both the "auto" and the current auto-selected 65b725ae77Skettenis value. */ 66b725ae77Skettenis var_auto_boolean, 67b725ae77Skettenis 68e93f7393Sniklas /* Unsigned Integer. *VAR is an unsigned int. The user can type 0 69e93f7393Sniklas to mean "unlimited", which is stored in *VAR as UINT_MAX. */ 70e93f7393Sniklas var_uinteger, 71e93f7393Sniklas 72e93f7393Sniklas /* Like var_uinteger but signed. *VAR is an int. The user can type 0 73e93f7393Sniklas to mean "unlimited", which is stored in *VAR as INT_MAX. */ 74e93f7393Sniklas var_integer, 75e93f7393Sniklas 76e93f7393Sniklas /* String which the user enters with escapes (e.g. the user types \n and 77e93f7393Sniklas it is a real newline in the stored string). 78e93f7393Sniklas *VAR is a malloc'd string, or NULL if the string is empty. */ 79e93f7393Sniklas var_string, 80e93f7393Sniklas /* String which stores what the user types verbatim. 81e93f7393Sniklas *VAR is a malloc'd string, or NULL if the string is empty. */ 82e93f7393Sniklas var_string_noescape, 83e93f7393Sniklas /* String which stores a filename. 84e93f7393Sniklas *VAR is a malloc'd string, or NULL if the string is empty. */ 85e93f7393Sniklas var_filename, 86e93f7393Sniklas /* ZeroableInteger. *VAR is an int. Like Unsigned Integer except 87e93f7393Sniklas that zero really means zero. */ 88e93f7393Sniklas var_zinteger, 89e93f7393Sniklas /* Enumerated type. Can only have one of the specified values. *VAR is a 90e93f7393Sniklas char pointer to the name of the element that we find. */ 91e93f7393Sniklas var_enum 92b725ae77Skettenis } 93b725ae77Skettenis var_types; 94e93f7393Sniklas 95e93f7393Sniklas /* This structure records one command'd definition. */ 96b725ae77Skettenis struct cmd_list_element; 97e93f7393Sniklas 98b725ae77Skettenis /* Forward-declarations of the entry-points of cli/cli-decode.c. */ 99e93f7393Sniklas 100b725ae77Skettenis extern struct cmd_list_element *add_cmd (char *, enum command_class, 101e93f7393Sniklas void (*fun) (char *, int), char *, 102b725ae77Skettenis struct cmd_list_element **); 103b725ae77Skettenis 104b725ae77Skettenis extern struct cmd_list_element *add_alias_cmd (char *, char *, 105b725ae77Skettenis enum command_class, int, 106b725ae77Skettenis struct cmd_list_element **); 107b725ae77Skettenis 108b725ae77Skettenis extern struct cmd_list_element *add_prefix_cmd (char *, enum command_class, 109b725ae77Skettenis void (*fun) (char *, int), 110b725ae77Skettenis char *, 111b725ae77Skettenis struct cmd_list_element **, 112b725ae77Skettenis char *, int, 113b725ae77Skettenis struct cmd_list_element **); 114b725ae77Skettenis 115b725ae77Skettenis extern struct cmd_list_element *add_abbrev_prefix_cmd (char *, 116b725ae77Skettenis enum command_class, 117b725ae77Skettenis void (*fun) (char *, 118b725ae77Skettenis int), 119b725ae77Skettenis char *, 120b725ae77Skettenis struct cmd_list_element 121b725ae77Skettenis **, char *, int, 122b725ae77Skettenis struct cmd_list_element 123b725ae77Skettenis **); 124b725ae77Skettenis 125b725ae77Skettenis /* Set the commands corresponding callback. */ 126b725ae77Skettenis 127b725ae77Skettenis typedef void cmd_cfunc_ftype (char *args, int from_tty); 128b725ae77Skettenis extern void set_cmd_cfunc (struct cmd_list_element *cmd, 129b725ae77Skettenis cmd_cfunc_ftype *cfunc); 130b725ae77Skettenis 131b725ae77Skettenis typedef void cmd_sfunc_ftype (char *args, int from_tty, 132b725ae77Skettenis struct cmd_list_element *c); 133b725ae77Skettenis extern void set_cmd_sfunc (struct cmd_list_element *cmd, 134b725ae77Skettenis cmd_sfunc_ftype *sfunc); 135b725ae77Skettenis 136b725ae77Skettenis extern void set_cmd_completer (struct cmd_list_element *cmd, 137b725ae77Skettenis char **(*completer) (char *text, char *word)); 138b725ae77Skettenis 139b725ae77Skettenis /* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs 140b725ae77Skettenis around in cmd objects to test the value of the commands sfunc(). */ 141b725ae77Skettenis extern int cmd_cfunc_eq (struct cmd_list_element *cmd, 142b725ae77Skettenis void (*cfunc) (char *args, int from_tty)); 143b725ae77Skettenis 144b725ae77Skettenis /* Each command object has a local context attached to it. . */ 145b725ae77Skettenis extern void set_cmd_context (struct cmd_list_element *cmd, void *context); 146b725ae77Skettenis extern void *get_cmd_context (struct cmd_list_element *cmd); 147b725ae77Skettenis 148b725ae77Skettenis 149b725ae77Skettenis /* Execute CMD's pre/post hook. Throw an error if the command fails. 150b725ae77Skettenis If already executing this pre/post hook, or there is no pre/post 151b725ae77Skettenis hook, the call is silently ignored. */ 152b725ae77Skettenis extern void execute_cmd_pre_hook (struct cmd_list_element *cmd); 153b725ae77Skettenis extern void execute_cmd_post_hook (struct cmd_list_element *cmd); 154b725ae77Skettenis 155b725ae77Skettenis /* Return the type of the command. */ 15663addd46Skettenis /* NOTE: cagney/2002-03-17: The deprecated_add_show_from_set() 15763addd46Skettenis function clones the set command passed as a parameter. The clone 15863addd46Skettenis operation will include (BUG?) any ``set'' command callback, if 15963addd46Skettenis present. Commands like ``info set'' call all the ``show'' command 16063addd46Skettenis callbacks. Unfortunately, for ``show'' commands cloned from 16163addd46Skettenis ``set'', this includes callbacks belonging to ``set'' commands. 16263addd46Skettenis Making this worse, this only occures if 16363addd46Skettenis deprecated_add_show_from_set() is called after add_cmd_sfunc() 16463addd46Skettenis (BUG?). */ 165b725ae77Skettenis extern enum cmd_types cmd_type (struct cmd_list_element *cmd); 166b725ae77Skettenis 167b725ae77Skettenis 168b725ae77Skettenis extern struct cmd_list_element *lookup_cmd (char **, 169b725ae77Skettenis struct cmd_list_element *, char *, 170b725ae77Skettenis int, int); 171b725ae77Skettenis 172b725ae77Skettenis extern struct cmd_list_element *lookup_cmd_1 (char **, 173b725ae77Skettenis struct cmd_list_element *, 174b725ae77Skettenis struct cmd_list_element **, 175b725ae77Skettenis int); 176e93f7393Sniklas 177e93f7393Sniklas extern struct cmd_list_element * 178b725ae77Skettenis deprecate_cmd (struct cmd_list_element *, char * ); 179e93f7393Sniklas 180e93f7393Sniklas extern void 181b725ae77Skettenis deprecated_cmd_warning (char **); 182e93f7393Sniklas 183b725ae77Skettenis extern int 184b725ae77Skettenis lookup_cmd_composition (char *text, 185b725ae77Skettenis struct cmd_list_element **alias, 186b725ae77Skettenis struct cmd_list_element **prefix_cmd, 187b725ae77Skettenis struct cmd_list_element **cmd); 188e93f7393Sniklas 189b725ae77Skettenis extern struct cmd_list_element *add_com (char *, enum command_class, 190b725ae77Skettenis void (*fun) (char *, int), char *); 191e93f7393Sniklas 192b725ae77Skettenis extern struct cmd_list_element *add_com_alias (char *, char *, 193b725ae77Skettenis enum command_class, int); 194e93f7393Sniklas 195b725ae77Skettenis extern struct cmd_list_element *add_info (char *, void (*fun) (char *, int), 196b725ae77Skettenis char *); 197e93f7393Sniklas 198b725ae77Skettenis extern struct cmd_list_element *add_info_alias (char *, char *, int); 199e93f7393Sniklas 200b725ae77Skettenis extern char **complete_on_cmdlist (struct cmd_list_element *, char *, char *); 201e93f7393Sniklas 202b725ae77Skettenis extern char **complete_on_enum (const char *enumlist[], char *, char *); 203e93f7393Sniklas 204b725ae77Skettenis extern void delete_cmd (char *, struct cmd_list_element **); 205e93f7393Sniklas 206b725ae77Skettenis extern void help_cmd (char *, struct ui_file *); 207e93f7393Sniklas 208b725ae77Skettenis extern void help_list (struct cmd_list_element *, char *, 209b725ae77Skettenis enum command_class, struct ui_file *); 210e93f7393Sniklas 211b725ae77Skettenis extern void help_cmd_list (struct cmd_list_element *, enum command_class, 212b725ae77Skettenis char *, int, struct ui_file *); 213e93f7393Sniklas 214b725ae77Skettenis extern struct cmd_list_element *add_set_cmd (char *name, enum 215b725ae77Skettenis command_class class, 216b725ae77Skettenis var_types var_type, void *var, 217b725ae77Skettenis char *doc, 218b725ae77Skettenis struct cmd_list_element **list); 219b725ae77Skettenis 220b725ae77Skettenis extern struct cmd_list_element *add_set_enum_cmd (char *name, 221b725ae77Skettenis enum command_class class, 222b725ae77Skettenis const char *enumlist[], 223b725ae77Skettenis const char **var, 224b725ae77Skettenis char *doc, 225b725ae77Skettenis struct cmd_list_element **list); 226*bb23a316Skettenis extern void add_setshow_enum_cmd (char *name, 227*bb23a316Skettenis enum command_class class, 228*bb23a316Skettenis const char *enumlist[], 229*bb23a316Skettenis const char **var, 230*bb23a316Skettenis const char *set_doc, 231*bb23a316Skettenis const char *show_doc, 232*bb23a316Skettenis const char *help_doc, 233*bb23a316Skettenis const char *print, 234*bb23a316Skettenis cmd_sfunc_ftype *set_func, 235*bb23a316Skettenis cmd_sfunc_ftype *show_func, 236*bb23a316Skettenis struct cmd_list_element **set_list, 237*bb23a316Skettenis struct cmd_list_element **show_list); 238b725ae77Skettenis 239b725ae77Skettenis extern void add_setshow_auto_boolean_cmd (char *name, 240b725ae77Skettenis enum command_class class, 241b725ae77Skettenis enum auto_boolean *var, 24263addd46Skettenis const char *set_doc, 24363addd46Skettenis const char *show_doc, 24463addd46Skettenis const char *help_doc, 24563addd46Skettenis const char *print, 246b725ae77Skettenis cmd_sfunc_ftype *set_func, 247b725ae77Skettenis cmd_sfunc_ftype *show_func, 248b725ae77Skettenis struct cmd_list_element **set_list, 249b725ae77Skettenis struct cmd_list_element **show_list); 250b725ae77Skettenis 251b725ae77Skettenis extern void add_setshow_boolean_cmd (char *name, 252b725ae77Skettenis enum command_class class, 253b725ae77Skettenis int *var, 25463addd46Skettenis const char *set_doc, const char *show_doc, 25563addd46Skettenis const char *help_doc, const char *print, 25663addd46Skettenis cmd_sfunc_ftype *set_func, 25763addd46Skettenis cmd_sfunc_ftype *show_func, 25863addd46Skettenis struct cmd_list_element **set_list, 25963addd46Skettenis struct cmd_list_element **show_list); 26063addd46Skettenis 26163addd46Skettenis extern void add_setshow_filename_cmd (char *name, 26263addd46Skettenis enum command_class class, 26363addd46Skettenis char **var, 26463addd46Skettenis const char *set_doc, 26563addd46Skettenis const char *show_doc, 26663addd46Skettenis const char *help_doc, 26763addd46Skettenis const char *print, 26863addd46Skettenis cmd_sfunc_ftype *set_func, 26963addd46Skettenis cmd_sfunc_ftype *show_func, 27063addd46Skettenis struct cmd_list_element **set_list, 27163addd46Skettenis struct cmd_list_element **show_list); 27263addd46Skettenis 27363addd46Skettenis extern void add_setshow_string_cmd (char *name, 27463addd46Skettenis enum command_class class, 27563addd46Skettenis char **var, 27663addd46Skettenis const char *set_doc, 27763addd46Skettenis const char *show_doc, 27863addd46Skettenis const char *help_doc, 27963addd46Skettenis const char *print, 280b725ae77Skettenis cmd_sfunc_ftype *set_func, 281b725ae77Skettenis cmd_sfunc_ftype *show_func, 282b725ae77Skettenis struct cmd_list_element **set_list, 283b725ae77Skettenis struct cmd_list_element **show_list); 284b725ae77Skettenis 285b725ae77Skettenis extern void add_setshow_uinteger_cmd (char *name, 286b725ae77Skettenis enum command_class class, 287b725ae77Skettenis unsigned int *var, 28863addd46Skettenis const char *set_doc, 28963addd46Skettenis const char *show_doc, 29063addd46Skettenis const char *help_doc, 29163addd46Skettenis const char *print, 292b725ae77Skettenis cmd_sfunc_ftype *set_func, 293b725ae77Skettenis cmd_sfunc_ftype *show_func, 294b725ae77Skettenis struct cmd_list_element **set_list, 295b725ae77Skettenis struct cmd_list_element **show_list); 296b725ae77Skettenis 29763addd46Skettenis extern void add_setshow_zinteger_cmd (char *name, 29863addd46Skettenis enum command_class class, 29963addd46Skettenis int *var, 30063addd46Skettenis const char *set_doc, 30163addd46Skettenis const char *show_doc, 30263addd46Skettenis const char *help_doc, 30363addd46Skettenis const char *print, 30463addd46Skettenis cmd_sfunc_ftype *set_func, 30563addd46Skettenis cmd_sfunc_ftype *show_func, 30663addd46Skettenis struct cmd_list_element **set_list, 30763addd46Skettenis struct cmd_list_element **show_list); 30863addd46Skettenis 30963addd46Skettenis extern struct cmd_list_element *deprecated_add_show_from_set (struct cmd_list_element *, 31063addd46Skettenis struct cmd_list_element **); 311e93f7393Sniklas 312e93f7393Sniklas /* Do a "show" command for each thing on a command list. */ 313e93f7393Sniklas 314b725ae77Skettenis extern void cmd_show_list (struct cmd_list_element *, int, char *); 315e93f7393Sniklas 316b725ae77Skettenis extern NORETURN void error_no_arg (char *) ATTR_NORETURN; 317e93f7393Sniklas 318b725ae77Skettenis extern void dont_repeat (void); 319e93f7393Sniklas 320e93f7393Sniklas /* Used to mark commands that don't do anything. If we just leave the 321e93f7393Sniklas function field NULL, the command is interpreted as a help topic, or 322e93f7393Sniklas as a class of commands. */ 323e93f7393Sniklas 324b725ae77Skettenis extern void not_just_help_class_command (char *, int); 325b725ae77Skettenis 326b725ae77Skettenis /* check function pointer */ 327b725ae77Skettenis extern int cmd_func_p (struct cmd_list_element *cmd); 328b725ae77Skettenis 329b725ae77Skettenis /* call the command function */ 330b725ae77Skettenis extern void cmd_func (struct cmd_list_element *cmd, char *args, int from_tty); 331e93f7393Sniklas 332e93f7393Sniklas #endif /* !defined (COMMAND_H) */ 333