ld/testsuite/
[external/binutils.git] / gdb / command.h
1 /* Header file for command creation.
2
3    Copyright (C) 1986, 1989-1995, 1999-2000, 2002, 2004, 2007-2012 Free
4    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 (COMMAND_H)
20 #define COMMAND_H 1
21
22 #include "gdb_vecs.h"
23
24 /* This file defines the public interface for any code wanting to
25    create commands.  */
26
27 /* Command classes are top-level categories into which commands are
28    broken down for "help" purposes.
29
30    Notes on classes: class_alias is for alias commands which are not
31    abbreviations of the original command.  class-pseudo is for
32    commands which are not really commands nor help topics ("stop").  */
33
34 enum command_class
35 {
36   /* Special args to help_list */
37   class_deprecated = -3, all_classes = -2, all_commands = -1,
38   /* Classes of commands */
39   no_class = -1, class_run = 0, class_vars, class_stack, class_files,
40   class_support, class_info, class_breakpoint, class_trace,
41   class_alias, class_bookmark, class_obscure, class_maintenance,
42   class_pseudo, class_tui, class_user, class_xdb,
43   no_set_class  /* Used for "show" commands that have no corresponding
44                    "set" command.  */
45 };
46
47 /* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
48    cmd_types'' can be moved from "command.h" to "cli-decode.h".  */
49 /* Not a set/show command.  Note that some commands which begin with
50    "set" or "show" might be in this category, if their syntax does
51    not fall into one of the following categories.  */
52 typedef enum cmd_types
53   {
54     not_set_cmd,
55     set_cmd,
56     show_cmd
57   }
58 cmd_types;
59
60 /* Types of "set" or "show" command.  */
61 typedef enum var_types
62   {
63     /* "on" or "off".  *VAR is an integer which is nonzero for on,
64        zero for off.  */
65     var_boolean,
66
67     /* "on" / "true" / "enable" or "off" / "false" / "disable" or
68        "auto.  *VAR is an ``enum auto_boolean''.  NOTE: In general a
69        custom show command will need to be implemented - one that for
70        "auto" prints both the "auto" and the current auto-selected
71        value.  */
72     var_auto_boolean,
73
74     /* Unsigned Integer.  *VAR is an unsigned int.  The user can type
75        0 to mean "unlimited", which is stored in *VAR as UINT_MAX.  */
76     var_uinteger,
77
78     /* Like var_uinteger but signed.  *VAR is an int.  The user can
79        type 0 to mean "unlimited", which is stored in *VAR as
80        INT_MAX.  */
81     var_integer,
82
83     /* String which the user enters with escapes (e.g. the user types
84        \n and it is a real newline in the stored string).
85        *VAR is a malloc'd string, or NULL if the string is empty.  */
86     var_string,
87     /* String which stores what the user types verbatim.
88        *VAR is a malloc'd string, or NULL if the string is empty.  */
89     var_string_noescape,
90     /* String which stores a filename.  (*VAR) is a malloc'd string,
91        or "" if the string was empty.  */
92     var_optional_filename,
93     /* String which stores a filename.  (*VAR) is a malloc'd
94        string.  */
95     var_filename,
96     /* ZeroableInteger.  *VAR is an int.  Like Unsigned Integer except
97        that zero really means zero.  */
98     var_zinteger,
99     /* ZeroableUnsignedInteger.  *VAR is an unsigned int.  Zero really
100        means zero.  */
101     var_zuinteger,
102     /* Enumerated type.  Can only have one of the specified values.
103        *VAR is a char pointer to the name of the element that we
104        find.  */
105     var_enum
106   }
107 var_types;
108
109 /* This structure records one command'd definition.  */
110 struct cmd_list_element;
111
112 /* Forward-declarations of the entry-points of cli/cli-decode.c.  */
113
114 /* API to the manipulation of command lists.  */
115
116 extern int valid_user_defined_cmd_name_p (const char *name);
117
118 extern struct cmd_list_element *add_cmd (char *, enum command_class,
119                                          void (*fun) (char *, int), char *,
120                                          struct cmd_list_element **);
121
122 extern struct cmd_list_element *add_alias_cmd (char *, char *,
123                                                enum command_class, int,
124                                                struct cmd_list_element **);
125
126 extern struct cmd_list_element *add_prefix_cmd (char *, enum command_class,
127                                                 void (*fun) (char *, int),
128                                                 char *,
129                                                 struct cmd_list_element **,
130                                                 char *, int,
131                                                 struct cmd_list_element **);
132
133 extern struct cmd_list_element *add_abbrev_prefix_cmd (char *,
134                                                        enum command_class,
135                                                        void (*fun) (char *,
136                                                                     int),
137                                                        char *,
138                                                        struct cmd_list_element
139                                                        **, char *, int,
140                                                        struct cmd_list_element
141                                                        **);
142
143 /* Set the commands corresponding callback.  */
144
145 typedef void cmd_cfunc_ftype (char *args, int from_tty);
146 extern void set_cmd_cfunc (struct cmd_list_element *cmd,
147                            cmd_cfunc_ftype *cfunc);
148
149 typedef void cmd_sfunc_ftype (char *args, int from_tty,
150                               struct cmd_list_element *c);
151 extern void set_cmd_sfunc (struct cmd_list_element *cmd,
152                            cmd_sfunc_ftype *sfunc);
153
154 typedef VEC (char_ptr) *completer_ftype (struct cmd_list_element *,
155                                          char *, char *);
156
157 extern void set_cmd_completer (struct cmd_list_element *, completer_ftype *);
158
159 /* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs
160    around in cmd objects to test the value of the commands sfunc().  */
161 extern int cmd_cfunc_eq (struct cmd_list_element *cmd,
162                          void (*cfunc) (char *args, int from_tty));
163
164 /* Each command object has a local context attached to it.  */
165 extern void set_cmd_context (struct cmd_list_element *cmd,
166                              void *context);
167 extern void *get_cmd_context (struct cmd_list_element *cmd);
168
169
170 /* Execute CMD's pre/post hook.  Throw an error if the command fails.
171    If already executing this pre/post hook, or there is no pre/post
172    hook, the call is silently ignored.  */
173 extern void execute_cmd_pre_hook (struct cmd_list_element *cmd);
174 extern void execute_cmd_post_hook (struct cmd_list_element *cmd);
175
176 /* Return the type of the command.  */
177 extern enum cmd_types cmd_type (struct cmd_list_element *cmd);
178
179 /* Flag for an ambiguous cmd_list result.  */
180 #define CMD_LIST_AMBIGUOUS ((struct cmd_list_element *) -1)
181
182 extern struct cmd_list_element *lookup_cmd (char **,
183                                             struct cmd_list_element *, char *,
184                                             int, int);
185
186 extern struct cmd_list_element *lookup_cmd_1 (char **,
187                                               struct cmd_list_element *,
188                                               struct cmd_list_element **,
189                                               int);
190
191 extern struct cmd_list_element *deprecate_cmd (struct cmd_list_element *,
192                                                char * );
193
194 extern void deprecated_cmd_warning (char **);
195
196 extern int lookup_cmd_composition (char *text,
197                                    struct cmd_list_element **alias,
198                                    struct cmd_list_element **prefix_cmd,
199                                    struct cmd_list_element **cmd);
200
201 extern struct cmd_list_element *add_com (char *, enum command_class,
202                                          void (*fun) (char *, int),
203                                          char *);
204
205 extern struct cmd_list_element *add_com_alias (char *, char *,
206                                                enum command_class, int);
207
208 extern struct cmd_list_element *add_info (char *,
209                                           void (*fun) (char *, int),
210                                           char *);
211
212 extern struct cmd_list_element *add_info_alias (char *, char *, int);
213
214 extern VEC (char_ptr) *complete_on_cmdlist (struct cmd_list_element *,
215                                             char *, char *);
216
217 extern VEC (char_ptr) *complete_on_enum (const char *const *enumlist,
218                                          char *, char *);
219
220 /* Functions that implement commands about CLI commands.  */
221
222 extern void help_list (struct cmd_list_element *, char *,
223                        enum command_class, struct ui_file *);
224
225 /* Method for show a set/show variable's VALUE on FILE.  If this
226    method isn't supplied deprecated_show_value_hack() is called (which
227    is not good).  */
228 typedef void (show_value_ftype) (struct ui_file *file,
229                                  int from_tty,
230                                  struct cmd_list_element *cmd,
231                                  const char *value);
232 /* NOTE: i18n: This function is not i18n friendly.  Callers should
233    instead print the value out directly.  */
234 extern show_value_ftype deprecated_show_value_hack;
235
236 extern void add_setshow_enum_cmd (char *name,
237                                   enum command_class class,
238                                   const char *const *enumlist,
239                                   const char **var,
240                                   const char *set_doc,
241                                   const char *show_doc,
242                                   const char *help_doc,
243                                   cmd_sfunc_ftype *set_func,
244                                   show_value_ftype *show_func,
245                                   struct cmd_list_element **set_list,
246                                   struct cmd_list_element **show_list);
247
248 extern void add_setshow_auto_boolean_cmd (char *name,
249                                           enum command_class class,
250                                           enum auto_boolean *var,
251                                           const char *set_doc,
252                                           const char *show_doc,
253                                           const char *help_doc,
254                                           cmd_sfunc_ftype *set_func,
255                                           show_value_ftype *show_func,
256                                           struct cmd_list_element **set_list,
257                                           struct cmd_list_element **show_list);
258
259 extern void add_setshow_boolean_cmd (char *name,
260                                      enum command_class class,
261                                      int *var,
262                                      const char *set_doc, const char *show_doc,
263                                      const char *help_doc,
264                                      cmd_sfunc_ftype *set_func,
265                                      show_value_ftype *show_func,
266                                      struct cmd_list_element **set_list,
267                                      struct cmd_list_element **show_list);
268
269 extern void add_setshow_filename_cmd (char *name,
270                                       enum command_class class,
271                                       char **var,
272                                       const char *set_doc,
273                                       const char *show_doc,
274                                       const char *help_doc,
275                                       cmd_sfunc_ftype *set_func,
276                                       show_value_ftype *show_func,
277                                       struct cmd_list_element **set_list,
278                                       struct cmd_list_element **show_list);
279
280 extern void add_setshow_string_cmd (char *name,
281                                     enum command_class class,
282                                     char **var,
283                                     const char *set_doc,
284                                     const char *show_doc,
285                                     const char *help_doc,
286                                     cmd_sfunc_ftype *set_func,
287                                     show_value_ftype *show_func,
288                                     struct cmd_list_element **set_list,
289                                     struct cmd_list_element **show_list);
290
291 extern void add_setshow_string_noescape_cmd (char *name,
292                                              enum command_class class,
293                                              char **var,
294                                              const char *set_doc,
295                                              const char *show_doc,
296                                              const char *help_doc,
297                                              cmd_sfunc_ftype *set_func,
298                                              show_value_ftype *show_func,
299                                              struct cmd_list_element **set_list,
300                                              struct cmd_list_element **show_list);
301
302 extern void add_setshow_optional_filename_cmd (char *name,
303                                                enum command_class class,
304                                                char **var,
305                                                const char *set_doc,
306                                                const char *show_doc,
307                                                const char *help_doc,
308                                                cmd_sfunc_ftype *set_func,
309                                                show_value_ftype *show_func,
310                                                struct cmd_list_element **set_list,
311                                                struct cmd_list_element **show_list);
312
313 extern void add_setshow_integer_cmd (char *name,
314                                      enum command_class class,
315                                      int *var,
316                                      const char *set_doc,
317                                      const char *show_doc,
318                                      const char *help_doc,
319                                      cmd_sfunc_ftype *set_func,
320                                      show_value_ftype *show_func,
321                                      struct cmd_list_element **set_list,
322                                      struct cmd_list_element **show_list);
323
324 extern void add_setshow_uinteger_cmd (char *name,
325                                       enum command_class class,
326                                       unsigned int *var,
327                                       const char *set_doc,
328                                       const char *show_doc,
329                                       const char *help_doc,
330                                       cmd_sfunc_ftype *set_func,
331                                       show_value_ftype *show_func,
332                                       struct cmd_list_element **set_list,
333                                       struct cmd_list_element **show_list);
334
335 extern void add_setshow_zinteger_cmd (char *name,
336                                       enum command_class class,
337                                       int *var,
338                                       const char *set_doc,
339                                       const char *show_doc,
340                                       const char *help_doc,
341                                       cmd_sfunc_ftype *set_func,
342                                       show_value_ftype *show_func,
343                                       struct cmd_list_element **set_list,
344                                       struct cmd_list_element **show_list);
345
346 extern void add_setshow_zuinteger_cmd (char *name,
347                                        enum command_class class,
348                                        unsigned int *var,
349                                        const char *set_doc,
350                                        const char *show_doc,
351                                        const char *help_doc,
352                                        cmd_sfunc_ftype *set_func,
353                                        show_value_ftype *show_func,
354                                        struct cmd_list_element **set_list,
355                                        struct cmd_list_element **show_list);
356
357 /* Do a "show" command for each thing on a command list.  */
358
359 extern void cmd_show_list (struct cmd_list_element *, int, char *);
360
361 /* Used everywhere whenever at least one parameter is required and
362    none is specified.  */
363
364 extern void error_no_arg (char *) ATTRIBUTE_NORETURN;
365
366 extern void dont_repeat (void);
367
368 extern struct cleanup *prevent_dont_repeat (void);
369
370 /* Used to mark commands that don't do anything.  If we just leave the
371    function field NULL, the command is interpreted as a help topic, or
372    as a class of commands.  */
373
374 extern void not_just_help_class_command (char *, int);
375
376 /* Check function pointer.  */
377 extern int cmd_func_p (struct cmd_list_element *cmd);
378
379 /* Call the command function.  */
380 extern void cmd_func (struct cmd_list_element *cmd,
381                       char *args, int from_tty);
382
383 #endif /* !defined (COMMAND_H) */