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