xref: /dflybsd-src/contrib/gdb-7/gdb/cli/cli-decode.h (revision cf7f2e2d389e8012d562650bd94d7e433f449d6e)
1 /* Header file for GDB command decoding library.
2 
3    Copyright (c) 2000, 2003, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18 
19 #if !defined (CLI_DECODE_H)
20 #define CLI_DECODE_H 1
21 
22 #include "command.h"
23 
24 struct re_pattern_buffer;
25 
26 #if 0
27 /* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
28    cmd_types'' can be moved from "command.h" to "cli-decode.h".  */
29 /* Not a set/show command.  Note that some commands which begin with
30    "set" or "show" might be in this category, if their syntax does
31    not fall into one of the following categories.  */
32 typedef enum cmd_types
33   {
34     not_set_cmd,
35     set_cmd,
36     show_cmd
37   }
38 cmd_types;
39 #endif
40 
41 /* This structure records one command'd definition.  */
42 
43 
44 /* This flag is used by the code executing commands to warn the user
45    the first time a deprecated command is used, see the 'flags' field in
46    the following struct.
47 */
48 #define CMD_DEPRECATED            0x1
49 #define DEPRECATED_WARN_USER      0x2
50 #define MALLOCED_REPLACEMENT      0x4
51 
52 struct cmd_list_element
53   {
54     /* Points to next command in this list.  */
55     struct cmd_list_element *next;
56 
57     /* Name of this command.  */
58     char *name;
59 
60     /* Command class; class values are chosen by application program.  */
61     enum command_class class;
62 
63     /* Function definition of this command.  NULL for command class
64        names and for help topics that are not really commands.  NOTE:
65        cagney/2002-02-02: This function signature is evolving.  For
66        the moment suggest sticking with either set_cmd_cfunc() or
67        set_cmd_sfunc().  */
68     void (*func) (struct cmd_list_element *c, char *args, int from_tty);
69     /* The command's real callback.  At present func() bounces through
70        to one of the below.  */
71     union
72       {
73 	/* If type is not_set_cmd, call it like this: */
74 	cmd_cfunc_ftype *cfunc;
75 	/* If type is set_cmd or show_cmd, first set the variables,
76 	   and then call this: */
77 	cmd_sfunc_ftype *sfunc;
78       }
79     function;
80 
81     /* Local state (context) for this command.  This can be anything.  */
82     void *context;
83 
84     /* Documentation of this command (or help topic).
85        First line is brief documentation; remaining lines form, with it,
86        the full documentation.  First line should end with a period.
87        Entire string should also end with a period, not a newline.  */
88     char *doc;
89 
90     /* For set/show commands.  A method for printing the output to the
91        specified stream.  */
92     show_value_ftype *show_value_func;
93 
94     /* flags : a bitfield
95 
96        bit 0: (LSB) CMD_DEPRECATED, when 1 indicated that this command
97        is deprecated. It may be removed from gdb's command set in the
98        future.
99 
100        bit 1: DEPRECATED_WARN_USER, the user needs to be warned that
101        this is a deprecated command.  The user should only be warned
102        the first time a command is used.
103 
104        bit 2: MALLOCED_REPLACEMENT, when functions are deprecated at
105        compile time (this is the way it should, in general, be done)
106        the memory containing the replacement string is statically
107        allocated.  In some cases it makes sense to deprecate commands
108        at runtime (the testsuite is one example).  In this case the
109        memory for replacement is malloc'ed.  When a command is
110        undeprecated or re-deprecated at runtime we don't want to risk
111        calling free on statically allocated memory, so we check this
112        flag.
113      */
114     int flags;
115 
116     /* If this command is deprecated, this is the replacement name.  */
117     char *replacement;
118 
119     /* If this command represents a show command, then this function
120        is called before the variable's value is examined.  */
121     void (*pre_show_hook) (struct cmd_list_element *c);
122 
123     /* Hook for another command to be executed before this command.  */
124     struct cmd_list_element *hook_pre;
125 
126     /* Hook for another command to be executed after this command.  */
127     struct cmd_list_element *hook_post;
128 
129     /* Flag that specifies if this command is already running its hook.  */
130     /* Prevents the possibility of hook recursion.  */
131     int hook_in;
132 
133     /* Nonzero identifies a prefix command.  For them, the address
134        of the variable containing the list of subcommands.  */
135     struct cmd_list_element **prefixlist;
136 
137     /* For prefix commands only:
138        String containing prefix commands to get here: this one
139        plus any others needed to get to it.  Should end in a space.
140        It is used before the word "command" in describing the
141        commands reached through this prefix.  */
142     char *prefixname;
143 
144     /* For prefix commands only:
145        nonzero means do not get an error if subcommand is not
146        recognized; call the prefix's own function in that case.  */
147     char allow_unknown;
148 
149     /* Nonzero says this is an abbreviation, and should not
150        be mentioned in lists of commands.
151        This allows "br<tab>" to complete to "break", which it
152        otherwise wouldn't.  */
153     char abbrev_flag;
154 
155     /* Completion routine for this command.  TEXT is the text beyond
156        what was matched for the command itself (leading whitespace is
157        skipped).  It stops where we are supposed to stop completing
158        (rl_point) and is '\0' terminated.
159 
160        Return value is a malloc'd vector of pointers to possible completions
161        terminated with NULL.  If there are no completions, returning a pointer
162        to a NULL would work but returning NULL itself is also valid.
163        WORD points in the same buffer as TEXT, and completions should be
164        returned relative to this position.  For example, suppose TEXT is "foo"
165        and we want to complete to "foobar".  If WORD is "oo", return
166        "oobar"; if WORD is "baz/foo", return "baz/foobar".  */
167     char **(*completer) (struct cmd_list_element *cmd, char *text, char *word);
168 
169     /* Destruction routine for this command.  If non-NULL, this is
170        called when this command instance is destroyed.  This may be
171        used to finalize the CONTEXT field, if needed.  */
172     void (*destroyer) (struct cmd_list_element *self, void *context);
173 
174     /* Type of "set" or "show" command (or SET_NOT_SET if not "set"
175        or "show").  */
176     cmd_types type;
177 
178     /* Pointer to variable affected by "set" and "show".  Doesn't matter
179        if type is not_set.  */
180     void *var;
181 
182     /* What kind of variable is *VAR?  */
183     var_types var_type;
184 
185     /* Pointer to NULL terminated list of enumerated values (like argv).  */
186     const char **enums;
187 
188     /* Pointer to command strings of user-defined commands */
189     struct command_line *user_commands;
190 
191     /* Pointer to command that is hooked by this one, (by hook_pre)
192        so the hook can be removed when this one is deleted.  */
193     struct cmd_list_element *hookee_pre;
194 
195     /* Pointer to command that is hooked by this one, (by hook_post)
196        so the hook can be removed when this one is deleted.  */
197     struct cmd_list_element *hookee_post;
198 
199     /* Pointer to command that is aliased by this one, so the
200        aliased command can be located in case it has been hooked.  */
201     struct cmd_list_element *cmd_pointer;
202 
203     /* Start of a linked list of all aliases of this command.  */
204     struct cmd_list_element *aliases;
205 
206     /* Link pointer for aliases on an alias list.  */
207     struct cmd_list_element *alias_chain;
208   };
209 
210 /* API to the manipulation of command lists.  */
211 
212 extern struct cmd_list_element *add_cmd (char *, enum command_class,
213 					 void (*fun) (char *, int), char *,
214 					 struct cmd_list_element **);
215 
216 extern struct cmd_list_element *add_alias_cmd (char *, char *,
217 					       enum command_class, int,
218 					       struct cmd_list_element **);
219 
220 extern struct cmd_list_element *add_prefix_cmd (char *, enum command_class,
221 						void (*fun) (char *, int),
222 						char *,
223 						struct cmd_list_element **,
224 						char *, int,
225 						struct cmd_list_element **);
226 
227 extern struct cmd_list_element *add_abbrev_prefix_cmd (char *,
228 						       enum command_class,
229 						       void (*fun) (char *,
230 								    int),
231 						       char *,
232 						       struct cmd_list_element
233 						       **, char *, int,
234 						       struct cmd_list_element
235 						       **);
236 
237 /* Set the commands corresponding callback.  */
238 
239 extern void set_cmd_cfunc (struct cmd_list_element *cmd,
240 			   void (*cfunc) (char *args, int from_tty));
241 
242 extern void set_cmd_sfunc (struct cmd_list_element *cmd,
243 			   void (*sfunc) (char *args, int from_tty,
244 					  struct cmd_list_element * c));
245 
246 extern void set_cmd_completer (struct cmd_list_element *cmd,
247 			       char **(*completer) (struct cmd_list_element *self,
248 						    char *text, char *word));
249 
250 /* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs
251    around in cmd objects to test the value of the commands sfunc().  */
252 extern int cmd_cfunc_eq (struct cmd_list_element *cmd,
253 			 void (*cfunc) (char *args, int from_tty));
254 
255 /* Access to the command's local context.  */
256 extern void set_cmd_context (struct cmd_list_element *cmd, void *context);
257 extern void *get_cmd_context (struct cmd_list_element *cmd);
258 
259 extern struct cmd_list_element *lookup_cmd (char **,
260 					    struct cmd_list_element *, char *,
261 					    int, int);
262 
263 extern struct cmd_list_element *lookup_cmd_1 (char **,
264 					      struct cmd_list_element *,
265 					      struct cmd_list_element **,
266 					      int);
267 
268 extern struct cmd_list_element *
269   deprecate_cmd (struct cmd_list_element *, char * );
270 
271 extern void
272   deprecated_cmd_warning (char **);
273 
274 extern int
275   lookup_cmd_composition (char *text,
276                         struct cmd_list_element **alias,
277                         struct cmd_list_element **prefix_cmd,
278                         struct cmd_list_element **cmd);
279 
280 extern struct cmd_list_element *add_com (char *, enum command_class,
281 					 void (*fun) (char *, int), char *);
282 
283 extern struct cmd_list_element *add_com_alias (char *, char *,
284 					       enum command_class, int);
285 
286 extern struct cmd_list_element *add_info (char *, void (*fun) (char *, int),
287 					  char *);
288 
289 extern struct cmd_list_element *add_info_alias (char *, char *, int);
290 
291 extern char **complete_on_cmdlist (struct cmd_list_element *, char *, char *);
292 
293 extern char **complete_on_enum (const char *enumlist[], char *, char *);
294 
295 extern void help_cmd_list (struct cmd_list_element *, enum command_class,
296 			   char *, int, struct ui_file *);
297 
298 /* Functions that implement commands about CLI commands. */
299 
300 extern void help_cmd (char *, struct ui_file *);
301 
302 extern void help_list (struct cmd_list_element *, char *,
303 		       enum command_class, struct ui_file *);
304 
305 extern void apropos_cmd (struct ui_file *, struct cmd_list_element *,
306                          struct re_pattern_buffer *, char *);
307 
308 /* Used to mark commands that don't do anything.  If we just leave the
309    function field NULL, the command is interpreted as a help topic, or
310    as a class of commands.  */
311 
312 extern void not_just_help_class_command (char *arg, int from_tty);
313 
314 /* Exported to cli/cli-setshow.c */
315 
316 extern void print_doc_line (struct ui_file *, char *);
317 
318 
319 #endif /* !defined (CLI_DECODE_H) */
320