1 /* Header file for GDB command decoding library. 2 3 Copyright (C) 2000-2013 Free Software Foundation, Inc. 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 3 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, see <http://www.gnu.org/licenses/>. */ 17 18 #if !defined (CLI_DECODE_H) 19 #define CLI_DECODE_H 1 20 21 /* This file defines the private interfaces for any code implementing 22 command internals. */ 23 24 /* Include the public interfaces. */ 25 #include "command.h" 26 27 struct re_pattern_buffer; 28 29 #if 0 30 /* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum 31 cmd_types'' can be moved from "command.h" to "cli-decode.h". */ 32 /* Not a set/show command. Note that some commands which begin with 33 "set" or "show" might be in this category, if their syntax does 34 not fall into one of the following categories. */ 35 typedef enum cmd_types 36 { 37 not_set_cmd, 38 set_cmd, 39 show_cmd 40 } 41 cmd_types; 42 #endif 43 44 /* This structure records one command'd definition. */ 45 46 47 /* This flag is used by the code executing commands to warn the user 48 the first time a deprecated command is used, see the 'flags' field 49 in the following struct. 50 */ 51 #define CMD_DEPRECATED 0x1 52 #define DEPRECATED_WARN_USER 0x2 53 #define MALLOCED_REPLACEMENT 0x4 54 #define DOC_ALLOCATED 0x8 55 56 struct cmd_list_element 57 { 58 /* Points to next command in this list. */ 59 struct cmd_list_element *next; 60 61 /* Name of this command. */ 62 char *name; 63 64 /* Command class; class values are chosen by application program. */ 65 enum command_class class; 66 67 /* Function definition of this command. NULL for command class 68 names and for help topics that are not really commands. NOTE: 69 cagney/2002-02-02: This function signature is evolving. For 70 the moment suggest sticking with either set_cmd_cfunc() or 71 set_cmd_sfunc(). */ 72 void (*func) (struct cmd_list_element *c, char *args, int from_tty); 73 /* The command's real callback. At present func() bounces through 74 to one of the below. */ 75 union 76 { 77 /* If type is not_set_cmd, call it like this: */ 78 cmd_cfunc_ftype *cfunc; 79 /* If type is set_cmd or show_cmd, first set the variables, 80 and then call this: */ 81 cmd_sfunc_ftype *sfunc; 82 } 83 function; 84 85 /* Local state (context) for this command. This can be anything. */ 86 void *context; 87 88 /* Documentation of this command (or help topic). 89 First line is brief documentation; remaining lines form, with it, 90 the full documentation. First line should end with a period. 91 Entire string should also end with a period, not a newline. */ 92 char *doc; 93 94 /* For set/show commands. A method for printing the output to the 95 specified stream. */ 96 show_value_ftype *show_value_func; 97 98 /* flags : a bitfield 99 100 bit 0: (LSB) CMD_DEPRECATED, when 1 indicated that this command 101 is deprecated. It may be removed from gdb's command set in the 102 future. 103 104 bit 1: DEPRECATED_WARN_USER, the user needs to be warned that 105 this is a deprecated command. The user should only be warned 106 the first time a command is used. 107 108 bit 2: MALLOCED_REPLACEMENT, when functions are deprecated at 109 compile time (this is the way it should, in general, be done) 110 the memory containing the replacement string is statically 111 allocated. In some cases it makes sense to deprecate commands 112 at runtime (the testsuite is one example). In this case the 113 memory for replacement is malloc'ed. When a command is 114 undeprecated or re-deprecated at runtime we don't want to risk 115 calling free on statically allocated memory, so we check this 116 flag. 117 118 bit 3: DOC_ALLOCATED, set if the doc field should be xfree'd. */ 119 120 int flags; 121 122 /* If this command is deprecated, this is the replacement name. */ 123 char *replacement; 124 125 /* If this command represents a show command, then this function 126 is called before the variable's value is examined. */ 127 void (*pre_show_hook) (struct cmd_list_element *c); 128 129 /* Hook for another command to be executed before this command. */ 130 struct cmd_list_element *hook_pre; 131 132 /* Hook for another command to be executed after this command. */ 133 struct cmd_list_element *hook_post; 134 135 /* Flag that specifies if this command is already running its hook. */ 136 /* Prevents the possibility of hook recursion. */ 137 int hook_in; 138 139 /* Nonzero identifies a prefix command. For them, the address 140 of the variable containing the list of subcommands. */ 141 struct cmd_list_element **prefixlist; 142 143 /* For prefix commands only: 144 String containing prefix commands to get here: this one 145 plus any others needed to get to it. Should end in a space. 146 It is used before the word "command" in describing the 147 commands reached through this prefix. */ 148 char *prefixname; 149 150 /* For prefix commands only: 151 nonzero means do not get an error if subcommand is not 152 recognized; call the prefix's own function in that case. */ 153 char allow_unknown; 154 155 /* The prefix command of this command. */ 156 struct cmd_list_element *prefix; 157 158 /* Nonzero says this is an abbreviation, and should not 159 be mentioned in lists of commands. 160 This allows "br<tab>" to complete to "break", which it 161 otherwise wouldn't. */ 162 char abbrev_flag; 163 164 /* Completion routine for this command. TEXT is the text beyond 165 what was matched for the command itself (leading whitespace is 166 skipped). It stops where we are supposed to stop completing 167 (rl_point) and is '\0' terminated. 168 169 Return value is a malloc'd vector of pointers to possible 170 completions terminated with NULL. If there are no completions, 171 returning a pointer to a NULL would work but returning NULL 172 itself is also valid. WORD points in the same buffer as TEXT, 173 and completions should be returned relative to this position. 174 For example, suppose TEXT is "foo" and we want to complete to 175 "foobar". If WORD is "oo", return "oobar"; if WORD is 176 "baz/foo", return "baz/foobar". */ 177 completer_ftype *completer; 178 179 /* Destruction routine for this command. If non-NULL, this is 180 called when this command instance is destroyed. This may be 181 used to finalize the CONTEXT field, if needed. */ 182 void (*destroyer) (struct cmd_list_element *self, void *context); 183 184 /* Type of "set" or "show" command (or SET_NOT_SET if not "set" 185 or "show"). */ 186 cmd_types type; 187 188 /* Pointer to variable affected by "set" and "show". Doesn't 189 matter if type is not_set. */ 190 void *var; 191 192 /* What kind of variable is *VAR? */ 193 var_types var_type; 194 195 /* Pointer to NULL terminated list of enumerated values (like 196 argv). */ 197 const char *const *enums; 198 199 /* Pointer to command strings of user-defined commands */ 200 struct command_line *user_commands; 201 202 /* Pointer to command that is hooked by this one, (by hook_pre) 203 so the hook can be removed when this one is deleted. */ 204 struct cmd_list_element *hookee_pre; 205 206 /* Pointer to command that is hooked by this one, (by hook_post) 207 so the hook can be removed when this one is deleted. */ 208 struct cmd_list_element *hookee_post; 209 210 /* Pointer to command that is aliased by this one, so the 211 aliased command can be located in case it has been hooked. */ 212 struct cmd_list_element *cmd_pointer; 213 214 /* Start of a linked list of all aliases of this command. */ 215 struct cmd_list_element *aliases; 216 217 /* Link pointer for aliases on an alias list. */ 218 struct cmd_list_element *alias_chain; 219 }; 220 221 extern void help_cmd_list (struct cmd_list_element *, enum command_class, 222 char *, int, struct ui_file *); 223 224 /* Functions that implement commands about CLI commands. */ 225 226 extern void help_cmd (char *, struct ui_file *); 227 228 extern void apropos_cmd (struct ui_file *, struct cmd_list_element *, 229 struct re_pattern_buffer *, char *); 230 231 /* Used to mark commands that don't do anything. If we just leave the 232 function field NULL, the command is interpreted as a help topic, or 233 as a class of commands. */ 234 235 extern void not_just_help_class_command (char *arg, int from_tty); 236 237 /* Exported to cli/cli-setshow.c */ 238 239 extern void print_doc_line (struct ui_file *, char *); 240 241 extern const char * const auto_boolean_enums[]; 242 243 #endif /* !defined (CLI_DECODE_H) */ 244