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