constify command docs
[external/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                                          const 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                                                 const char *,
136                                                 struct cmd_list_element **,
137                                                 const 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                                                        const char *,
144                                                        struct cmd_list_element
145                                                        **, const 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                                                const 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                                          const 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                                           const char *);
216
217 extern struct cmd_list_element *add_info_alias (const char *, const char *,
218                                                 int);
219
220 extern VEC (char_ptr) *complete_on_cmdlist (struct cmd_list_element *,
221                                             const char *, const char *, int);
222
223 extern VEC (char_ptr) *complete_on_enum (const char *const *enumlist,
224                                          const char *, const char *);
225
226 /* Functions that implement commands about CLI commands.  */
227
228 extern void help_list (struct cmd_list_element *, const char *,
229                        enum command_class, struct ui_file *);
230
231 /* Method for show a set/show variable's VALUE on FILE.  If this
232    method isn't supplied deprecated_show_value_hack() is called (which
233    is not good).  */
234 typedef void (show_value_ftype) (struct ui_file *file,
235                                  int from_tty,
236                                  struct cmd_list_element *cmd,
237                                  const char *value);
238 /* NOTE: i18n: This function is not i18n friendly.  Callers should
239    instead print the value out directly.  */
240 extern show_value_ftype deprecated_show_value_hack;
241
242 extern void add_setshow_enum_cmd (const char *name,
243                                   enum command_class class,
244                                   const char *const *enumlist,
245                                   const char **var,
246                                   const char *set_doc,
247                                   const char *show_doc,
248                                   const char *help_doc,
249                                   cmd_sfunc_ftype *set_func,
250                                   show_value_ftype *show_func,
251                                   struct cmd_list_element **set_list,
252                                   struct cmd_list_element **show_list);
253
254 extern void add_setshow_auto_boolean_cmd (const char *name,
255                                           enum command_class class,
256                                           enum auto_boolean *var,
257                                           const char *set_doc,
258                                           const char *show_doc,
259                                           const char *help_doc,
260                                           cmd_sfunc_ftype *set_func,
261                                           show_value_ftype *show_func,
262                                           struct cmd_list_element **set_list,
263                                           struct cmd_list_element **show_list);
264
265 extern void add_setshow_boolean_cmd (const char *name,
266                                      enum command_class class,
267                                      int *var,
268                                      const char *set_doc, const char *show_doc,
269                                      const char *help_doc,
270                                      cmd_sfunc_ftype *set_func,
271                                      show_value_ftype *show_func,
272                                      struct cmd_list_element **set_list,
273                                      struct cmd_list_element **show_list);
274
275 extern void add_setshow_filename_cmd (const char *name,
276                                       enum command_class class,
277                                       char **var,
278                                       const char *set_doc,
279                                       const char *show_doc,
280                                       const char *help_doc,
281                                       cmd_sfunc_ftype *set_func,
282                                       show_value_ftype *show_func,
283                                       struct cmd_list_element **set_list,
284                                       struct cmd_list_element **show_list);
285
286 extern void add_setshow_string_cmd (const char *name,
287                                     enum command_class class,
288                                     char **var,
289                                     const char *set_doc,
290                                     const char *show_doc,
291                                     const char *help_doc,
292                                     cmd_sfunc_ftype *set_func,
293                                     show_value_ftype *show_func,
294                                     struct cmd_list_element **set_list,
295                                     struct cmd_list_element **show_list);
296
297 extern struct cmd_list_element *add_setshow_string_noescape_cmd
298                       (const char *name,
299                        enum command_class class,
300                        char **var,
301                        const char *set_doc,
302                        const char *show_doc,
303                        const char *help_doc,
304                        cmd_sfunc_ftype *set_func,
305                        show_value_ftype *show_func,
306                        struct cmd_list_element **set_list,
307                        struct cmd_list_element **show_list);
308
309 extern void add_setshow_optional_filename_cmd (const char *name,
310                                                enum command_class class,
311                                                char **var,
312                                                const char *set_doc,
313                                                const char *show_doc,
314                                                const char *help_doc,
315                                                cmd_sfunc_ftype *set_func,
316                                                show_value_ftype *show_func,
317                                                struct cmd_list_element **set_list,
318                                                struct cmd_list_element **show_list);
319
320 extern void add_setshow_integer_cmd (const char *name,
321                                      enum command_class class,
322                                      int *var,
323                                      const char *set_doc,
324                                      const char *show_doc,
325                                      const char *help_doc,
326                                      cmd_sfunc_ftype *set_func,
327                                      show_value_ftype *show_func,
328                                      struct cmd_list_element **set_list,
329                                      struct cmd_list_element **show_list);
330
331 extern void add_setshow_uinteger_cmd (const char *name,
332                                       enum command_class class,
333                                       unsigned int *var,
334                                       const char *set_doc,
335                                       const char *show_doc,
336                                       const char *help_doc,
337                                       cmd_sfunc_ftype *set_func,
338                                       show_value_ftype *show_func,
339                                       struct cmd_list_element **set_list,
340                                       struct cmd_list_element **show_list);
341
342 extern void add_setshow_zinteger_cmd (const char *name,
343                                       enum command_class class,
344                                       int *var,
345                                       const char *set_doc,
346                                       const char *show_doc,
347                                       const char *help_doc,
348                                       cmd_sfunc_ftype *set_func,
349                                       show_value_ftype *show_func,
350                                       struct cmd_list_element **set_list,
351                                       struct cmd_list_element **show_list);
352
353 extern void add_setshow_zuinteger_cmd (const char *name,
354                                        enum command_class class,
355                                        unsigned int *var,
356                                        const char *set_doc,
357                                        const char *show_doc,
358                                        const char *help_doc,
359                                        cmd_sfunc_ftype *set_func,
360                                        show_value_ftype *show_func,
361                                        struct cmd_list_element **set_list,
362                                        struct cmd_list_element **show_list);
363
364 extern void
365   add_setshow_zuinteger_unlimited_cmd (const char *name,
366                                        enum command_class class,
367                                        int *var,
368                                        const char *set_doc,
369                                        const char *show_doc,
370                                        const char *help_doc,
371                                        cmd_sfunc_ftype *set_func,
372                                        show_value_ftype *show_func,
373                                        struct cmd_list_element **set_list,
374                                        struct cmd_list_element **show_list);
375
376 /* Do a "show" command for each thing on a command list.  */
377
378 extern void cmd_show_list (struct cmd_list_element *, int, const char *);
379
380 /* Used everywhere whenever at least one parameter is required and
381    none is specified.  */
382
383 extern void error_no_arg (const char *) ATTRIBUTE_NORETURN;
384
385 extern void dont_repeat (void);
386
387 extern struct cleanup *prevent_dont_repeat (void);
388
389 /* Used to mark commands that don't do anything.  If we just leave the
390    function field NULL, the command is interpreted as a help topic, or
391    as a class of commands.  */
392
393 extern void not_just_help_class_command (char *, int);
394
395 /* Check function pointer.  */
396 extern int cmd_func_p (struct cmd_list_element *cmd);
397
398 /* Call the command function.  */
399 extern void cmd_func (struct cmd_list_element *cmd,
400                       char *args, int from_tty);
401
402 #endif /* !defined (COMMAND_H) */