1 /* Header file for command creation.
3 Copyright (C) 1986, 1989-1995, 1999-2000, 2002, 2004, 2007-2012 Free
4 Software Foundation, Inc.
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.
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.
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/>. */
19 #if !defined (COMMAND_H)
24 /* This file defines the public interface for any code wanting to
27 /* Command classes are top-level categories into which commands are
28 broken down for "help" purposes.
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"). */
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
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
60 /* Types of "set" or "show" command. */
61 typedef enum var_types
63 /* "on" or "off". *VAR is an integer which is nonzero for on,
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
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. */
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
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. */
87 /* String which stores what the user types verbatim.
88 *VAR is a malloc'd string, or NULL if the string is empty. */
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
96 /* ZeroableInteger. *VAR is an int. Like Unsigned Integer except
97 that zero really means zero. */
99 /* ZeroableUnsignedInteger. *VAR is an unsigned int. Zero really
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
109 /* This structure records one command'd definition. */
110 struct cmd_list_element;
112 /* Forward-declarations of the entry-points of cli/cli-decode.c. */
114 /* API to the manipulation of command lists. */
116 extern int valid_user_defined_cmd_name_p (const char *name);
118 extern struct cmd_list_element *add_cmd (char *, enum command_class,
119 void (*fun) (char *, int), char *,
120 struct cmd_list_element **);
122 extern struct cmd_list_element *add_alias_cmd (char *, char *,
123 enum command_class, int,
124 struct cmd_list_element **);
126 extern struct cmd_list_element *add_prefix_cmd (char *, enum command_class,
127 void (*fun) (char *, int),
129 struct cmd_list_element **,
131 struct cmd_list_element **);
133 extern struct cmd_list_element *add_abbrev_prefix_cmd (char *,
138 struct cmd_list_element
140 struct cmd_list_element
143 /* Set the commands corresponding callback. */
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);
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);
154 typedef VEC (char_ptr) *completer_ftype (struct cmd_list_element *,
157 extern void set_cmd_completer (struct cmd_list_element *, completer_ftype *);
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));
164 /* Each command object has a local context attached to it. */
165 extern void set_cmd_context (struct cmd_list_element *cmd,
167 extern void *get_cmd_context (struct cmd_list_element *cmd);
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);
176 /* Return the type of the command. */
177 extern enum cmd_types cmd_type (struct cmd_list_element *cmd);
179 /* Flag for an ambiguous cmd_list result. */
180 #define CMD_LIST_AMBIGUOUS ((struct cmd_list_element *) -1)
182 extern struct cmd_list_element *lookup_cmd (char **,
183 struct cmd_list_element *, char *,
186 extern struct cmd_list_element *lookup_cmd_1 (char **,
187 struct cmd_list_element *,
188 struct cmd_list_element **,
191 extern struct cmd_list_element *deprecate_cmd (struct cmd_list_element *,
194 extern void deprecated_cmd_warning (char **);
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);
201 extern struct cmd_list_element *add_com (char *, enum command_class,
202 void (*fun) (char *, int),
205 extern struct cmd_list_element *add_com_alias (char *, char *,
206 enum command_class, int);
208 extern struct cmd_list_element *add_info (char *,
209 void (*fun) (char *, int),
212 extern struct cmd_list_element *add_info_alias (char *, char *, int);
214 extern VEC (char_ptr) *complete_on_cmdlist (struct cmd_list_element *,
217 extern VEC (char_ptr) *complete_on_enum (const char *const *enumlist,
220 /* Functions that implement commands about CLI commands. */
222 extern void help_list (struct cmd_list_element *, char *,
223 enum command_class, struct ui_file *);
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
228 typedef void (show_value_ftype) (struct ui_file *file,
230 struct cmd_list_element *cmd,
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;
236 extern void add_setshow_enum_cmd (char *name,
237 enum command_class class,
238 const char *const *enumlist,
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);
248 extern void add_setshow_auto_boolean_cmd (char *name,
249 enum command_class class,
250 enum auto_boolean *var,
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);
259 extern void add_setshow_boolean_cmd (char *name,
260 enum command_class class,
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);
269 extern void add_setshow_filename_cmd (char *name,
270 enum command_class class,
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);
280 extern void add_setshow_string_cmd (char *name,
281 enum command_class class,
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);
291 extern void add_setshow_string_noescape_cmd (char *name,
292 enum command_class class,
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);
302 extern void add_setshow_optional_filename_cmd (char *name,
303 enum command_class class,
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);
313 extern void add_setshow_integer_cmd (char *name,
314 enum command_class class,
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);
324 extern void add_setshow_uinteger_cmd (char *name,
325 enum command_class class,
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);
335 extern void add_setshow_zinteger_cmd (char *name,
336 enum command_class class,
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);
346 extern void add_setshow_zuinteger_cmd (char *name,
347 enum command_class class,
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);
357 /* Do a "show" command for each thing on a command list. */
359 extern void cmd_show_list (struct cmd_list_element *, int, char *);
361 /* Used everywhere whenever at least one parameter is required and
362 none is specified. */
364 extern void error_no_arg (char *) ATTRIBUTE_NORETURN;
366 extern void dont_repeat (void);
368 extern struct cleanup *prevent_dont_repeat (void);
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. */
374 extern void not_just_help_class_command (char *, int);
376 /* Check function pointer. */
377 extern int cmd_func_p (struct cmd_list_element *cmd);
379 /* Call the command function. */
380 extern void cmd_func (struct cmd_list_element *cmd,
381 char *args, int from_tty);
383 #endif /* !defined (COMMAND_H) */