GDB (API)
|
00001 /* Header file for GDB command decoding library. 00002 00003 Copyright (C) 2000-2013 Free Software Foundation, Inc. 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 3 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 00017 00018 #if !defined (CLI_DECODE_H) 00019 #define CLI_DECODE_H 1 00020 00021 /* This file defines the private interfaces for any code implementing 00022 command internals. */ 00023 00024 /* Include the public interfaces. */ 00025 #include "command.h" 00026 00027 struct re_pattern_buffer; 00028 00029 #if 0 00030 /* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum 00031 cmd_types'' can be moved from "command.h" to "cli-decode.h". */ 00032 /* Not a set/show command. Note that some commands which begin with 00033 "set" or "show" might be in this category, if their syntax does 00034 not fall into one of the following categories. */ 00035 typedef enum cmd_types 00036 { 00037 not_set_cmd, 00038 set_cmd, 00039 show_cmd 00040 } 00041 cmd_types; 00042 #endif 00043 00044 /* This structure records one command'd definition. */ 00045 00046 00047 /* This flag is used by the code executing commands to warn the user 00048 the first time a deprecated command is used, see the 'flags' field 00049 in the following struct. 00050 */ 00051 #define CMD_DEPRECATED 0x1 00052 #define DEPRECATED_WARN_USER 0x2 00053 #define MALLOCED_REPLACEMENT 0x4 00054 #define DOC_ALLOCATED 0x8 00055 00056 struct cmd_list_element 00057 { 00058 /* Points to next command in this list. */ 00059 struct cmd_list_element *next; 00060 00061 /* Name of this command. */ 00062 const char *name; 00063 00064 /* Command class; class values are chosen by application program. */ 00065 enum command_class class; 00066 00067 /* Function definition of this command. NULL for command class 00068 names and for help topics that are not really commands. NOTE: 00069 cagney/2002-02-02: This function signature is evolving. For 00070 the moment suggest sticking with either set_cmd_cfunc() or 00071 set_cmd_sfunc(). */ 00072 void (*func) (struct cmd_list_element *c, char *args, int from_tty); 00073 /* The command's real callback. At present func() bounces through 00074 to one of the below. */ 00075 union 00076 { 00077 /* If type is not_set_cmd, call it like this: */ 00078 cmd_cfunc_ftype *cfunc; 00079 /* If type is set_cmd or show_cmd, first set the variables, 00080 and then call this: */ 00081 cmd_sfunc_ftype *sfunc; 00082 } 00083 function; 00084 00085 /* Local state (context) for this command. This can be anything. */ 00086 void *context; 00087 00088 /* Documentation of this command (or help topic). 00089 First line is brief documentation; remaining lines form, with it, 00090 the full documentation. First line should end with a period. 00091 Entire string should also end with a period, not a newline. */ 00092 char *doc; 00093 00094 /* For set/show commands. A method for printing the output to the 00095 specified stream. */ 00096 show_value_ftype *show_value_func; 00097 00098 /* flags : a bitfield 00099 00100 bit 0: (LSB) CMD_DEPRECATED, when 1 indicated that this command 00101 is deprecated. It may be removed from gdb's command set in the 00102 future. 00103 00104 bit 1: DEPRECATED_WARN_USER, the user needs to be warned that 00105 this is a deprecated command. The user should only be warned 00106 the first time a command is used. 00107 00108 bit 2: MALLOCED_REPLACEMENT, when functions are deprecated at 00109 compile time (this is the way it should, in general, be done) 00110 the memory containing the replacement string is statically 00111 allocated. In some cases it makes sense to deprecate commands 00112 at runtime (the testsuite is one example). In this case the 00113 memory for replacement is malloc'ed. When a command is 00114 undeprecated or re-deprecated at runtime we don't want to risk 00115 calling free on statically allocated memory, so we check this 00116 flag. 00117 00118 bit 3: DOC_ALLOCATED, set if the doc field should be xfree'd. */ 00119 00120 int flags; 00121 00122 /* If this command is deprecated, this is the replacement name. */ 00123 char *replacement; 00124 00125 /* If this command represents a show command, then this function 00126 is called before the variable's value is examined. */ 00127 void (*pre_show_hook) (struct cmd_list_element *c); 00128 00129 /* Hook for another command to be executed before this command. */ 00130 struct cmd_list_element *hook_pre; 00131 00132 /* Hook for another command to be executed after this command. */ 00133 struct cmd_list_element *hook_post; 00134 00135 /* Flag that specifies if this command is already running its hook. */ 00136 /* Prevents the possibility of hook recursion. */ 00137 int hook_in; 00138 00139 /* Nonzero identifies a prefix command. For them, the address 00140 of the variable containing the list of subcommands. */ 00141 struct cmd_list_element **prefixlist; 00142 00143 /* For prefix commands only: 00144 String containing prefix commands to get here: this one 00145 plus any others needed to get to it. Should end in a space. 00146 It is used before the word "command" in describing the 00147 commands reached through this prefix. */ 00148 char *prefixname; 00149 00150 /* For prefix commands only: 00151 nonzero means do not get an error if subcommand is not 00152 recognized; call the prefix's own function in that case. */ 00153 char allow_unknown; 00154 00155 /* The prefix command of this command. */ 00156 struct cmd_list_element *prefix; 00157 00158 /* Nonzero says this is an abbreviation, and should not 00159 be mentioned in lists of commands. 00160 This allows "br<tab>" to complete to "break", which it 00161 otherwise wouldn't. */ 00162 char abbrev_flag; 00163 00164 /* Completion routine for this command. TEXT is the text beyond 00165 what was matched for the command itself (leading whitespace is 00166 skipped). It stops where we are supposed to stop completing 00167 (rl_point) and is '\0' terminated. 00168 00169 Return value is a malloc'd vector of pointers to possible 00170 completions terminated with NULL. If there are no completions, 00171 returning a pointer to a NULL would work but returning NULL 00172 itself is also valid. WORD points in the same buffer as TEXT, 00173 and completions should be returned relative to this position. 00174 For example, suppose TEXT is "foo" and we want to complete to 00175 "foobar". If WORD is "oo", return "oobar"; if WORD is 00176 "baz/foo", return "baz/foobar". */ 00177 completer_ftype *completer; 00178 00179 /* Destruction routine for this command. If non-NULL, this is 00180 called when this command instance is destroyed. This may be 00181 used to finalize the CONTEXT field, if needed. */ 00182 void (*destroyer) (struct cmd_list_element *self, void *context); 00183 00184 /* Type of "set" or "show" command (or SET_NOT_SET if not "set" 00185 or "show"). */ 00186 cmd_types type; 00187 00188 /* Pointer to variable affected by "set" and "show". Doesn't 00189 matter if type is not_set. */ 00190 void *var; 00191 00192 /* What kind of variable is *VAR? */ 00193 var_types var_type; 00194 00195 /* Pointer to NULL terminated list of enumerated values (like 00196 argv). */ 00197 const char *const *enums; 00198 00199 /* Pointer to command strings of user-defined commands */ 00200 struct command_line *user_commands; 00201 00202 /* Pointer to command that is hooked by this one, (by hook_pre) 00203 so the hook can be removed when this one is deleted. */ 00204 struct cmd_list_element *hookee_pre; 00205 00206 /* Pointer to command that is hooked by this one, (by hook_post) 00207 so the hook can be removed when this one is deleted. */ 00208 struct cmd_list_element *hookee_post; 00209 00210 /* Pointer to command that is aliased by this one, so the 00211 aliased command can be located in case it has been hooked. */ 00212 struct cmd_list_element *cmd_pointer; 00213 00214 /* Start of a linked list of all aliases of this command. */ 00215 struct cmd_list_element *aliases; 00216 00217 /* Link pointer for aliases on an alias list. */ 00218 struct cmd_list_element *alias_chain; 00219 }; 00220 00221 extern void help_cmd_list (struct cmd_list_element *, enum command_class, 00222 char *, int, struct ui_file *); 00223 00224 /* Functions that implement commands about CLI commands. */ 00225 00226 extern void help_cmd (char *, struct ui_file *); 00227 00228 extern void apropos_cmd (struct ui_file *, struct cmd_list_element *, 00229 struct re_pattern_buffer *, char *); 00230 00231 /* Used to mark commands that don't do anything. If we just leave the 00232 function field NULL, the command is interpreted as a help topic, or 00233 as a class of commands. */ 00234 00235 extern void not_just_help_class_command (char *arg, int from_tty); 00236 00237 /* Exported to cli/cli-setshow.c */ 00238 00239 extern void print_doc_line (struct ui_file *, char *); 00240 00241 extern const char * const auto_boolean_enums[]; 00242 00243 #endif /* !defined (CLI_DECODE_H) */