xref: /openbsd-src/gnu/usr.bin/binutils/gdb/command.h (revision bb23a316c891856816ac736f816d9e1c002648f1)
1e93f7393Sniklas /* Header file for command-reading library command.c.
2b725ae77Skettenis 
3b725ae77Skettenis    Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1999,
463addd46Skettenis    2000, 2002, 2004 Free Software Foundation, Inc.
5e93f7393Sniklas 
6e93f7393Sniklas    This program is free software; you can redistribute it and/or modify
7e93f7393Sniklas    it under the terms of the GNU General Public License as published by
8e93f7393Sniklas    the Free Software Foundation; either version 2 of the License, or
9e93f7393Sniklas    (at your option) any later version.
10e93f7393Sniklas 
11e93f7393Sniklas    This program is distributed in the hope that it will be useful,
12e93f7393Sniklas    but WITHOUT ANY WARRANTY; without even the implied warranty of
13e93f7393Sniklas    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14e93f7393Sniklas    GNU General Public License for more details.
15e93f7393Sniklas 
16e93f7393Sniklas    You should have received a copy of the GNU General Public License
17e93f7393Sniklas    along with this program; if not, write to the Free Software
18b725ae77Skettenis    Foundation, Inc., 59 Temple Place - Suite 330,
19b725ae77Skettenis    Boston, MA 02111-1307, USA.  */
20e93f7393Sniklas 
21e93f7393Sniklas #if !defined (COMMAND_H)
22e93f7393Sniklas #define COMMAND_H 1
23e93f7393Sniklas 
24b725ae77Skettenis /* Command classes are top-level categories into which commands are broken
25b725ae77Skettenis    down for "help" purposes.
26b725ae77Skettenis    Notes on classes: class_alias is for alias commands which are not
27b725ae77Skettenis    abbreviations of the original command.  class-pseudo is for
28b725ae77Skettenis    commands which are not really commands nor help topics ("stop").  */
29b725ae77Skettenis 
30b725ae77Skettenis enum command_class
31b725ae77Skettenis {
32b725ae77Skettenis   /* Special args to help_list */
33b725ae77Skettenis   class_deprecated, all_classes = -2, all_commands = -1,
34b725ae77Skettenis   /* Classes of commands */
35b725ae77Skettenis   no_class = -1, class_run = 0, class_vars, class_stack,
36b725ae77Skettenis   class_files, class_support, class_info, class_breakpoint, class_trace,
37b725ae77Skettenis   class_alias, class_obscure, class_user, class_maintenance,
38b725ae77Skettenis   class_pseudo, class_tui, class_xdb
39b725ae77Skettenis };
40b725ae77Skettenis 
41b725ae77Skettenis /* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
42b725ae77Skettenis    cmd_types'' can be moved from "command.h" to "cli-decode.h".  */
43e93f7393Sniklas /* Not a set/show command.  Note that some commands which begin with
44e93f7393Sniklas    "set" or "show" might be in this category, if their syntax does
45e93f7393Sniklas    not fall into one of the following categories.  */
46b725ae77Skettenis typedef enum cmd_types
47b725ae77Skettenis   {
48e93f7393Sniklas     not_set_cmd,
49e93f7393Sniklas     set_cmd,
50e93f7393Sniklas     show_cmd
51b725ae77Skettenis   }
52b725ae77Skettenis cmd_types;
53e93f7393Sniklas 
54e93f7393Sniklas /* Types of "set" or "show" command.  */
55b725ae77Skettenis typedef enum var_types
56b725ae77Skettenis   {
57e93f7393Sniklas     /* "on" or "off".  *VAR is an integer which is nonzero for on,
58e93f7393Sniklas        zero for off.  */
59e93f7393Sniklas     var_boolean,
60b725ae77Skettenis 
61b725ae77Skettenis     /* "on" / "true" / "enable" or "off" / "false" / "disable" or
62b725ae77Skettenis        "auto.  *VAR is an ``enum auto_boolean''.  NOTE: In general a
63b725ae77Skettenis        custom show command will need to be implemented - one that for
64b725ae77Skettenis        "auto" prints both the "auto" and the current auto-selected
65b725ae77Skettenis        value. */
66b725ae77Skettenis     var_auto_boolean,
67b725ae77Skettenis 
68e93f7393Sniklas     /* Unsigned Integer.  *VAR is an unsigned int.  The user can type 0
69e93f7393Sniklas        to mean "unlimited", which is stored in *VAR as UINT_MAX.  */
70e93f7393Sniklas     var_uinteger,
71e93f7393Sniklas 
72e93f7393Sniklas     /* Like var_uinteger but signed.  *VAR is an int.  The user can type 0
73e93f7393Sniklas        to mean "unlimited", which is stored in *VAR as INT_MAX.  */
74e93f7393Sniklas     var_integer,
75e93f7393Sniklas 
76e93f7393Sniklas     /* String which the user enters with escapes (e.g. the user types \n and
77e93f7393Sniklas        it is a real newline in the stored string).
78e93f7393Sniklas        *VAR is a malloc'd string, or NULL if the string is empty.  */
79e93f7393Sniklas     var_string,
80e93f7393Sniklas     /* String which stores what the user types verbatim.
81e93f7393Sniklas        *VAR is a malloc'd string, or NULL if the string is empty.  */
82e93f7393Sniklas     var_string_noescape,
83e93f7393Sniklas     /* String which stores a filename.
84e93f7393Sniklas        *VAR is a malloc'd string, or NULL if the string is empty.  */
85e93f7393Sniklas     var_filename,
86e93f7393Sniklas     /* ZeroableInteger.  *VAR is an int.  Like Unsigned Integer except
87e93f7393Sniklas        that zero really means zero.  */
88e93f7393Sniklas     var_zinteger,
89e93f7393Sniklas     /* Enumerated type.  Can only have one of the specified values.  *VAR is a
90e93f7393Sniklas        char pointer to the name of the element that we find.  */
91e93f7393Sniklas     var_enum
92b725ae77Skettenis   }
93b725ae77Skettenis var_types;
94e93f7393Sniklas 
95e93f7393Sniklas /* This structure records one command'd definition.  */
96b725ae77Skettenis struct cmd_list_element;
97e93f7393Sniklas 
98b725ae77Skettenis /* Forward-declarations of the entry-points of cli/cli-decode.c.  */
99e93f7393Sniklas 
100b725ae77Skettenis extern struct cmd_list_element *add_cmd (char *, enum command_class,
101e93f7393Sniklas 					 void (*fun) (char *, int), char *,
102b725ae77Skettenis 					 struct cmd_list_element **);
103b725ae77Skettenis 
104b725ae77Skettenis extern struct cmd_list_element *add_alias_cmd (char *, char *,
105b725ae77Skettenis 					       enum command_class, int,
106b725ae77Skettenis 					       struct cmd_list_element **);
107b725ae77Skettenis 
108b725ae77Skettenis extern struct cmd_list_element *add_prefix_cmd (char *, enum command_class,
109b725ae77Skettenis 						void (*fun) (char *, int),
110b725ae77Skettenis 						char *,
111b725ae77Skettenis 						struct cmd_list_element **,
112b725ae77Skettenis 						char *, int,
113b725ae77Skettenis 						struct cmd_list_element **);
114b725ae77Skettenis 
115b725ae77Skettenis extern struct cmd_list_element *add_abbrev_prefix_cmd (char *,
116b725ae77Skettenis 						       enum command_class,
117b725ae77Skettenis 						       void (*fun) (char *,
118b725ae77Skettenis 								    int),
119b725ae77Skettenis 						       char *,
120b725ae77Skettenis 						       struct cmd_list_element
121b725ae77Skettenis 						       **, char *, int,
122b725ae77Skettenis 						       struct cmd_list_element
123b725ae77Skettenis 						       **);
124b725ae77Skettenis 
125b725ae77Skettenis /* Set the commands corresponding callback.  */
126b725ae77Skettenis 
127b725ae77Skettenis typedef void cmd_cfunc_ftype (char *args, int from_tty);
128b725ae77Skettenis extern void set_cmd_cfunc (struct cmd_list_element *cmd,
129b725ae77Skettenis 			   cmd_cfunc_ftype *cfunc);
130b725ae77Skettenis 
131b725ae77Skettenis typedef void cmd_sfunc_ftype (char *args, int from_tty,
132b725ae77Skettenis 			      struct cmd_list_element *c);
133b725ae77Skettenis extern void set_cmd_sfunc (struct cmd_list_element *cmd,
134b725ae77Skettenis 			   cmd_sfunc_ftype *sfunc);
135b725ae77Skettenis 
136b725ae77Skettenis extern void set_cmd_completer (struct cmd_list_element *cmd,
137b725ae77Skettenis 			       char **(*completer) (char *text, char *word));
138b725ae77Skettenis 
139b725ae77Skettenis /* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs
140b725ae77Skettenis    around in cmd objects to test the value of the commands sfunc().  */
141b725ae77Skettenis extern int cmd_cfunc_eq (struct cmd_list_element *cmd,
142b725ae77Skettenis 			 void (*cfunc) (char *args, int from_tty));
143b725ae77Skettenis 
144b725ae77Skettenis /* Each command object has a local context attached to it. .  */
145b725ae77Skettenis extern void set_cmd_context (struct cmd_list_element *cmd, void *context);
146b725ae77Skettenis extern void *get_cmd_context (struct cmd_list_element *cmd);
147b725ae77Skettenis 
148b725ae77Skettenis 
149b725ae77Skettenis /* Execute CMD's pre/post hook.  Throw an error if the command fails.
150b725ae77Skettenis    If already executing this pre/post hook, or there is no pre/post
151b725ae77Skettenis    hook, the call is silently ignored.  */
152b725ae77Skettenis extern void execute_cmd_pre_hook (struct cmd_list_element *cmd);
153b725ae77Skettenis extern void execute_cmd_post_hook (struct cmd_list_element *cmd);
154b725ae77Skettenis 
155b725ae77Skettenis /* Return the type of the command.  */
15663addd46Skettenis /* NOTE: cagney/2002-03-17: The deprecated_add_show_from_set()
15763addd46Skettenis    function clones the set command passed as a parameter.  The clone
15863addd46Skettenis    operation will include (BUG?) any ``set'' command callback, if
15963addd46Skettenis    present.  Commands like ``info set'' call all the ``show'' command
16063addd46Skettenis    callbacks.  Unfortunately, for ``show'' commands cloned from
16163addd46Skettenis    ``set'', this includes callbacks belonging to ``set'' commands.
16263addd46Skettenis    Making this worse, this only occures if
16363addd46Skettenis    deprecated_add_show_from_set() is called after add_cmd_sfunc()
16463addd46Skettenis    (BUG?).  */
165b725ae77Skettenis extern enum cmd_types cmd_type (struct cmd_list_element *cmd);
166b725ae77Skettenis 
167b725ae77Skettenis 
168b725ae77Skettenis extern struct cmd_list_element *lookup_cmd (char **,
169b725ae77Skettenis 					    struct cmd_list_element *, char *,
170b725ae77Skettenis 					    int, int);
171b725ae77Skettenis 
172b725ae77Skettenis extern struct cmd_list_element *lookup_cmd_1 (char **,
173b725ae77Skettenis 					      struct cmd_list_element *,
174b725ae77Skettenis 					      struct cmd_list_element **,
175b725ae77Skettenis 					      int);
176e93f7393Sniklas 
177e93f7393Sniklas extern struct cmd_list_element *
178b725ae77Skettenis   deprecate_cmd (struct cmd_list_element *, char * );
179e93f7393Sniklas 
180e93f7393Sniklas extern void
181b725ae77Skettenis   deprecated_cmd_warning (char **);
182e93f7393Sniklas 
183b725ae77Skettenis extern int
184b725ae77Skettenis   lookup_cmd_composition (char *text,
185b725ae77Skettenis                         struct cmd_list_element **alias,
186b725ae77Skettenis                         struct cmd_list_element **prefix_cmd,
187b725ae77Skettenis                         struct cmd_list_element **cmd);
188e93f7393Sniklas 
189b725ae77Skettenis extern struct cmd_list_element *add_com (char *, enum command_class,
190b725ae77Skettenis 					 void (*fun) (char *, int), char *);
191e93f7393Sniklas 
192b725ae77Skettenis extern struct cmd_list_element *add_com_alias (char *, char *,
193b725ae77Skettenis 					       enum command_class, int);
194e93f7393Sniklas 
195b725ae77Skettenis extern struct cmd_list_element *add_info (char *, void (*fun) (char *, int),
196b725ae77Skettenis 					  char *);
197e93f7393Sniklas 
198b725ae77Skettenis extern struct cmd_list_element *add_info_alias (char *, char *, int);
199e93f7393Sniklas 
200b725ae77Skettenis extern char **complete_on_cmdlist (struct cmd_list_element *, char *, char *);
201e93f7393Sniklas 
202b725ae77Skettenis extern char **complete_on_enum (const char *enumlist[], char *, char *);
203e93f7393Sniklas 
204b725ae77Skettenis extern void delete_cmd (char *, struct cmd_list_element **);
205e93f7393Sniklas 
206b725ae77Skettenis extern void help_cmd (char *, struct ui_file *);
207e93f7393Sniklas 
208b725ae77Skettenis extern void help_list (struct cmd_list_element *, char *,
209b725ae77Skettenis 		       enum command_class, struct ui_file *);
210e93f7393Sniklas 
211b725ae77Skettenis extern void help_cmd_list (struct cmd_list_element *, enum command_class,
212b725ae77Skettenis 			   char *, int, struct ui_file *);
213e93f7393Sniklas 
214b725ae77Skettenis extern struct cmd_list_element *add_set_cmd (char *name, enum
215b725ae77Skettenis 					     command_class class,
216b725ae77Skettenis 					     var_types var_type, void *var,
217b725ae77Skettenis 					     char *doc,
218b725ae77Skettenis 					     struct cmd_list_element **list);
219b725ae77Skettenis 
220b725ae77Skettenis extern struct cmd_list_element *add_set_enum_cmd (char *name,
221b725ae77Skettenis 						  enum command_class class,
222b725ae77Skettenis 						  const char *enumlist[],
223b725ae77Skettenis 						  const char **var,
224b725ae77Skettenis 						  char *doc,
225b725ae77Skettenis 						  struct cmd_list_element **list);
226*bb23a316Skettenis extern void add_setshow_enum_cmd (char *name,
227*bb23a316Skettenis 				  enum command_class class,
228*bb23a316Skettenis 				  const char *enumlist[],
229*bb23a316Skettenis 				  const char **var,
230*bb23a316Skettenis 				  const char *set_doc,
231*bb23a316Skettenis 				  const char *show_doc,
232*bb23a316Skettenis 				  const char *help_doc,
233*bb23a316Skettenis 				  const char *print,
234*bb23a316Skettenis 				  cmd_sfunc_ftype *set_func,
235*bb23a316Skettenis 				  cmd_sfunc_ftype *show_func,
236*bb23a316Skettenis 				  struct cmd_list_element **set_list,
237*bb23a316Skettenis 				  struct cmd_list_element **show_list);
238b725ae77Skettenis 
239b725ae77Skettenis extern void add_setshow_auto_boolean_cmd (char *name,
240b725ae77Skettenis 					  enum command_class class,
241b725ae77Skettenis 					  enum auto_boolean *var,
24263addd46Skettenis 					  const char *set_doc,
24363addd46Skettenis 					  const char *show_doc,
24463addd46Skettenis 					  const char *help_doc,
24563addd46Skettenis 					  const char *print,
246b725ae77Skettenis 					  cmd_sfunc_ftype *set_func,
247b725ae77Skettenis 					  cmd_sfunc_ftype *show_func,
248b725ae77Skettenis 					  struct cmd_list_element **set_list,
249b725ae77Skettenis 					  struct cmd_list_element **show_list);
250b725ae77Skettenis 
251b725ae77Skettenis extern void add_setshow_boolean_cmd (char *name,
252b725ae77Skettenis 				     enum command_class class,
253b725ae77Skettenis 				     int *var,
25463addd46Skettenis 				     const char *set_doc, const char *show_doc,
25563addd46Skettenis 				     const char *help_doc, const char *print,
25663addd46Skettenis 				     cmd_sfunc_ftype *set_func,
25763addd46Skettenis 				     cmd_sfunc_ftype *show_func,
25863addd46Skettenis 				     struct cmd_list_element **set_list,
25963addd46Skettenis 				     struct cmd_list_element **show_list);
26063addd46Skettenis 
26163addd46Skettenis extern void add_setshow_filename_cmd (char *name,
26263addd46Skettenis 				      enum command_class class,
26363addd46Skettenis 				      char **var,
26463addd46Skettenis 				      const char *set_doc,
26563addd46Skettenis 				      const char *show_doc,
26663addd46Skettenis 				      const char *help_doc,
26763addd46Skettenis 				      const char *print,
26863addd46Skettenis 				      cmd_sfunc_ftype *set_func,
26963addd46Skettenis 				      cmd_sfunc_ftype *show_func,
27063addd46Skettenis 				      struct cmd_list_element **set_list,
27163addd46Skettenis 				      struct cmd_list_element **show_list);
27263addd46Skettenis 
27363addd46Skettenis extern void add_setshow_string_cmd (char *name,
27463addd46Skettenis 				    enum command_class class,
27563addd46Skettenis 				    char **var,
27663addd46Skettenis 				    const char *set_doc,
27763addd46Skettenis 				    const char *show_doc,
27863addd46Skettenis 				    const char *help_doc,
27963addd46Skettenis 				    const char *print,
280b725ae77Skettenis 				    cmd_sfunc_ftype *set_func,
281b725ae77Skettenis 				    cmd_sfunc_ftype *show_func,
282b725ae77Skettenis 				    struct cmd_list_element **set_list,
283b725ae77Skettenis 				    struct cmd_list_element **show_list);
284b725ae77Skettenis 
285b725ae77Skettenis extern void add_setshow_uinteger_cmd (char *name,
286b725ae77Skettenis 				      enum command_class class,
287b725ae77Skettenis 				      unsigned int *var,
28863addd46Skettenis 				      const char *set_doc,
28963addd46Skettenis 				      const char *show_doc,
29063addd46Skettenis 				      const char *help_doc,
29163addd46Skettenis 				      const char *print,
292b725ae77Skettenis 				      cmd_sfunc_ftype *set_func,
293b725ae77Skettenis 				      cmd_sfunc_ftype *show_func,
294b725ae77Skettenis 				      struct cmd_list_element **set_list,
295b725ae77Skettenis 				      struct cmd_list_element **show_list);
296b725ae77Skettenis 
29763addd46Skettenis extern void add_setshow_zinteger_cmd (char *name,
29863addd46Skettenis 				      enum command_class class,
29963addd46Skettenis 				      int *var,
30063addd46Skettenis 				      const char *set_doc,
30163addd46Skettenis 				      const char *show_doc,
30263addd46Skettenis 				      const char *help_doc,
30363addd46Skettenis 				      const char *print,
30463addd46Skettenis 				      cmd_sfunc_ftype *set_func,
30563addd46Skettenis 				      cmd_sfunc_ftype *show_func,
30663addd46Skettenis 				      struct cmd_list_element **set_list,
30763addd46Skettenis 				      struct cmd_list_element **show_list);
30863addd46Skettenis 
30963addd46Skettenis extern struct cmd_list_element *deprecated_add_show_from_set (struct cmd_list_element *,
31063addd46Skettenis 							      struct cmd_list_element **);
311e93f7393Sniklas 
312e93f7393Sniklas /* Do a "show" command for each thing on a command list.  */
313e93f7393Sniklas 
314b725ae77Skettenis extern void cmd_show_list (struct cmd_list_element *, int, char *);
315e93f7393Sniklas 
316b725ae77Skettenis extern NORETURN void error_no_arg (char *) ATTR_NORETURN;
317e93f7393Sniklas 
318b725ae77Skettenis extern void dont_repeat (void);
319e93f7393Sniklas 
320e93f7393Sniklas /* Used to mark commands that don't do anything.  If we just leave the
321e93f7393Sniklas    function field NULL, the command is interpreted as a help topic, or
322e93f7393Sniklas    as a class of commands.  */
323e93f7393Sniklas 
324b725ae77Skettenis extern void not_just_help_class_command (char *, int);
325b725ae77Skettenis 
326b725ae77Skettenis /* check function pointer */
327b725ae77Skettenis extern int cmd_func_p (struct cmd_list_element *cmd);
328b725ae77Skettenis 
329b725ae77Skettenis /* call the command function */
330b725ae77Skettenis extern void cmd_func (struct cmd_list_element *cmd, char *args, int from_tty);
331e93f7393Sniklas 
332e93f7393Sniklas #endif /* !defined (COMMAND_H) */
333