gdb: Setting setter return a bool to tell if the value changed
[binutils-gdb.git] / gdb / command.h
1 /* Header file for command creation.
2
3 Copyright (C) 1986-2021 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 "gdbsupport/gdb_vecs.h"
22 #include "gdbsupport/scoped_restore.h"
23
24 struct completion_tracker;
25
26 /* This file defines the public interface for any code wanting to
27 create commands. */
28
29 /* Command classes are top-level categories into which commands are
30 broken down for "help" purposes.
31
32 The class_alias is used for the user-defined aliases, defined
33 using the "alias" command.
34
35 Aliases pre-defined by GDB (e.g. the alias "bt" of the "backtrace" command)
36 are not using the class_alias.
37 Different pre-defined aliases of the same command do not necessarily
38 have the same classes. For example, class_stack is used for the
39 "backtrace" and its "bt" alias", while "info stack" (also an alias
40 of "backtrace" uses class_info. */
41
42 enum command_class
43 {
44 /* Classes of commands followed by a comment giving the name
45 to use in "help <classname>".
46 Note that help accepts unambiguous abbreviated class names. */
47
48 /* Special classes to help_list */
49 class_deprecated = -3,
50 all_classes = -2, /* help without <classname> */
51 all_commands = -1, /* all */
52
53 /* Classes of commands */
54 no_class = -1,
55 class_run = 0, /* running */
56 class_vars, /* data */
57 class_stack, /* stack */
58 class_files, /* files */
59 class_support, /* support */
60 class_info, /* status */
61 class_breakpoint, /* breakpoints */
62 class_trace, /* tracepoints */
63 class_alias, /* aliases */
64 class_bookmark,
65 class_obscure, /* obscure */
66 class_maintenance, /* internals */
67 class_tui, /* text-user-interface */
68 class_user, /* user-defined */
69
70 /* Used for "show" commands that have no corresponding "set" command. */
71 no_set_class
72 };
73
74 /* Types of "set" or "show" command. */
75 typedef enum var_types
76 {
77 /* "on" or "off". *VAR is a bool which is true for on,
78 false for off. */
79 var_boolean,
80
81 /* "on" / "true" / "enable" or "off" / "false" / "disable" or
82 "auto. *VAR is an ``enum auto_boolean''. NOTE: In general a
83 custom show command will need to be implemented - one that for
84 "auto" prints both the "auto" and the current auto-selected
85 value. */
86 var_auto_boolean,
87
88 /* Unsigned Integer. *VAR is an unsigned int. The user can type
89 0 to mean "unlimited", which is stored in *VAR as UINT_MAX. */
90 var_uinteger,
91
92 /* Like var_uinteger but signed. *VAR is an int. The user can
93 type 0 to mean "unlimited", which is stored in *VAR as
94 INT_MAX. The only remaining use of it is the Python API.
95 Don't use it elsewhere. */
96 var_integer,
97
98 /* String which the user enters with escapes (e.g. the user types
99 \n and it is a real newline in the stored string).
100 *VAR is a std::string, "" if the string is empty. */
101 var_string,
102 /* String which stores what the user types verbatim.
103 *VAR is std::string, "" if the string is empty. */
104 var_string_noescape,
105 /* String which stores a filename. (*VAR) is a std::string,
106 "" if the string was empty. */
107 var_optional_filename,
108 /* String which stores a filename. (*VAR) is a std::string. */
109 var_filename,
110 /* ZeroableInteger. *VAR is an int. Like var_integer except
111 that zero really means zero. */
112 var_zinteger,
113 /* ZeroableUnsignedInteger. *VAR is an unsigned int. Zero really
114 means zero. */
115 var_zuinteger,
116 /* ZeroableUnsignedInteger with unlimited value. *VAR is an int,
117 but its range is [0, INT_MAX]. -1 stands for unlimited and
118 other negative numbers are not allowed. */
119 var_zuinteger_unlimited,
120 /* Enumerated type. Can only have one of the specified values.
121 *VAR is a char pointer to the name of the element that we
122 find. */
123 var_enum
124 }
125 var_types;
126
127 /* Return true if a setting of type VAR_TYPE is backed with type T.
128
129 This function is left without definition intentionally. This template is
130 specialized for all valid types that are used to back var_types. Therefore
131 if one tries to instantiate this un-specialized template it means the T
132 parameter is not a type used to back a var_type and it is most likely a
133 programming error. */
134 template<typename T>
135 bool var_type_uses (var_types var_type) = delete;
136
137 /* Return true if a setting of type T is backed by a bool variable. */
138 template<>
139 inline bool var_type_uses<bool> (var_types t)
140 {
141 return t == var_boolean;
142 };
143
144 /* Return true if a setting of type T is backed by a auto_boolean variable.
145 */
146 template<>
147 inline bool var_type_uses<enum auto_boolean> (var_types t)
148 {
149 return t == var_auto_boolean;
150 }
151
152 /* Return true if a setting of type T is backed by an unsigned int variable.
153 */
154 template<>
155 inline bool var_type_uses<unsigned int> (var_types t)
156 {
157 return (t == var_uinteger || t == var_zinteger || t == var_zuinteger);
158 }
159
160 /* Return true if a setting of type T is backed by an int variable. */
161 template<>
162 inline bool var_type_uses<int> (var_types t)
163 {
164 return (t == var_integer || t == var_zinteger
165 || t == var_zuinteger_unlimited);
166 }
167
168 /* Return true if a setting of type T is backed by a std::string variable. */
169 template<>
170 inline bool var_type_uses<std::string> (var_types t)
171 {
172 return (t == var_string || t == var_string_noescape
173 || t == var_optional_filename || t == var_filename);
174 }
175
176 /* Return true if a setting of type T is backed by a const char * variable.
177 */
178 template<>
179 inline bool var_type_uses<const char *> (var_types t)
180 {
181 return t == var_enum;
182 }
183
184 /* Function signature for a callback used to get a value from a setting. */
185
186 template<typename T>
187 using setting_getter_ftype = const T &(*) ();
188
189 /* Function signature for a callback used to set a value to a setting. */
190
191 template<typename T>
192 using setting_setter_ftype = void (*) (const T &);
193
194 /* Generic/type-erased function pointer. */
195
196 using erased_func = void (*) ();
197
198 /* Interface for getting and setting a setting's value.
199
200 The underlying data can be of any VAR_TYPES type. */
201 struct setting
202 {
203 /* Create a setting backed by a variable of type T.
204
205 Type T must match the var type VAR_TYPE (see VAR_TYPE_USES). */
206 template<typename T>
207 setting (var_types var_type, T *var)
208 : m_var_type (var_type), m_var (var)
209 {
210 gdb_assert (var != nullptr);
211 gdb_assert (var_type_uses<T> (var_type));
212 }
213
214 /* A setting can also be constructed with a pre-validated
215 type-erased variable. Use the following function to
216 validate & type-erase said variable/function pointers. */
217
218 struct erased_args
219 {
220 void *var;
221 erased_func setter;
222 erased_func getter;
223 };
224
225 template<typename T>
226 static erased_args erase_args (var_types var_type,
227 T *var,
228 setting_setter_ftype<T> set_setting_func,
229 setting_getter_ftype<T> get_setting_func)
230 {
231 gdb_assert (var_type_uses<T> (var_type));
232 /* The getter and the setter must be both provided or both omitted. */
233 gdb_assert
234 ((set_setting_func == nullptr) == (get_setting_func == nullptr));
235
236 /* The caller must provide a pointer to a variable or get/set functions, but
237 not both. */
238 gdb_assert ((set_setting_func == nullptr) != (var == nullptr));
239
240 return {
241 var,
242 reinterpret_cast<erased_func> (set_setting_func),
243 reinterpret_cast<erased_func> (get_setting_func)
244 };
245 }
246
247 /* Create a setting backed by pre-validated type-erased args.
248 ERASED_VAR's fields' real types must match the var type VAR_TYPE
249 (see VAR_TYPE_USES). */
250 setting (var_types var_type, const erased_args &args)
251 : m_var_type (var_type),
252 m_var (args.var),
253 m_getter (args.getter),
254 m_setter (args.setter)
255 {
256 }
257
258 /* Create a setting backed by setter and getter functions.
259
260 Type T must match the var type VAR_TYPE (see VAR_TYPE_USES). */
261 template<typename T>
262 setting (var_types var_type,
263 setting_setter_ftype<T> setter,
264 setting_getter_ftype<T> getter)
265 : m_var_type (var_type)
266 {
267 gdb_assert (var_type_uses<T> (var_type));
268
269 /* Getters and setters are cast to and from the arbitrary `void (*) ()`
270 function pointer type. Make sure that the two types are really of the
271 same size. */
272 gdb_static_assert (sizeof (m_getter) == sizeof (getter));
273 gdb_static_assert (sizeof (m_setter) == sizeof (setter));
274
275 m_getter = reinterpret_cast<erased_func> (getter);
276 m_setter = reinterpret_cast<erased_func> (setter);
277 }
278
279 /* Access the type of the current setting. */
280 var_types type () const
281 { return m_var_type; }
282
283 /* Return the current value.
284
285 The template parameter T is the type of the variable used to store the
286 setting. */
287 template<typename T>
288 const T &get () const
289 {
290 gdb_assert (var_type_uses<T> (m_var_type));
291 gdb_assert (m_var != nullptr);
292
293 if (m_var == nullptr)
294 {
295 gdb_assert (m_getter != nullptr);
296 auto getter = reinterpret_cast<setting_getter_ftype<T>> (m_getter);
297 return getter ();
298 }
299 else
300 return *static_cast<const T *> (m_var);
301 }
302
303 /* Sets the value of the setting to V. Returns true if the setting was
304 effectively changed, false if the update failed and the setting is left
305 unchanged.
306
307 If we have a user-provided setter, use it to set the setting. Otherwise
308 copy the value V to the internally referenced buffer.
309
310 The template parameter T indicates the type of the variable used to store
311 the setting.
312
313 The var_type of the setting must match T. */
314 template<typename T>
315 bool set (const T &v)
316 {
317 /* Check that the current instance is of one of the supported types for
318 this instantiation. */
319 gdb_assert (var_type_uses<T> (m_var_type));
320
321 const T old_value = this->get<T> ();
322
323 if (m_var == nullptr)
324 {
325 gdb_assert (m_setter != nullptr);
326 auto setter = reinterpret_cast<setting_setter_ftype<T>> (m_setter);
327 setter (v);
328 }
329 else
330 *static_cast<T *> (m_var) = v;
331
332 return old_value != this->get<T> ();
333 }
334
335 private:
336 /* The type of the variable M_VAR is pointing to, or that M_GETTER / M_SETTER
337 get or set. */
338 var_types m_var_type;
339
340 /* Pointer to the enclosed variable
341
342 Either M_VAR is non-nullptr, or both M_GETTER and M_SETTER are
343 non-nullptr. */
344 void *m_var = nullptr;
345
346 /* Pointer to a user provided getter. */
347 erased_func m_getter = nullptr;
348
349 /* Pointer to a user provided setter. */
350 erased_func m_setter = nullptr;
351 };
352
353 /* This structure records one command'd definition. */
354 struct cmd_list_element;
355
356 /* The "simple" signature of command callbacks, which doesn't include a
357 cmd_list_element parameter. */
358
359 typedef void cmd_simple_func_ftype (const char *args, int from_tty);
360
361 /* This structure specifies notifications to be suppressed by a cli
362 command interpreter. */
363
364 struct cli_suppress_notification
365 {
366 /* Inferior, thread, frame selected notification suppressed? */
367 int user_selected_context;
368 };
369
370 extern struct cli_suppress_notification cli_suppress_notification;
371
372 /* Forward-declarations of the entry-points of cli/cli-decode.c. */
373
374 /* API to the manipulation of command lists. */
375
376 /* Return TRUE if NAME is a valid user-defined command name.
377 This is a stricter subset of all gdb commands,
378 see find_command_name_length. */
379
380 extern bool valid_user_defined_cmd_name_p (const char *name);
381
382 /* Return TRUE if C is a valid command character. */
383
384 extern bool valid_cmd_char_p (int c);
385
386 /* Const-correct variant of the above. */
387
388 extern struct cmd_list_element *add_cmd (const char *, enum command_class,
389 cmd_simple_func_ftype *fun,
390 const char *,
391 struct cmd_list_element **);
392
393 /* Like add_cmd, but no command function is specified. */
394
395 extern struct cmd_list_element *add_cmd (const char *, enum command_class,
396 const char *,
397 struct cmd_list_element **);
398
399 extern struct cmd_list_element *add_cmd_suppress_notification
400 (const char *name, enum command_class theclass,
401 cmd_simple_func_ftype *fun, const char *doc,
402 struct cmd_list_element **list,
403 int *suppress_notification);
404
405 extern struct cmd_list_element *add_alias_cmd (const char *,
406 cmd_list_element *,
407 enum command_class, int,
408 struct cmd_list_element **);
409
410
411 extern struct cmd_list_element *add_prefix_cmd (const char *, enum command_class,
412 cmd_simple_func_ftype *fun,
413 const char *,
414 struct cmd_list_element **,
415 int,
416 struct cmd_list_element **);
417
418 /* Like add_prefix_cmd, but sets the callback to a function that
419 simply calls help_list. */
420
421 extern struct cmd_list_element *add_basic_prefix_cmd
422 (const char *, enum command_class, const char *, struct cmd_list_element **,
423 int, struct cmd_list_element **);
424
425 /* Like add_prefix_cmd, but useful for "show" prefixes. This sets the
426 callback to a function that simply calls cmd_show_list. */
427
428 extern struct cmd_list_element *add_show_prefix_cmd
429 (const char *, enum command_class, const char *, struct cmd_list_element **,
430 int, struct cmd_list_element **);
431
432 extern struct cmd_list_element *add_prefix_cmd_suppress_notification
433 (const char *name, enum command_class theclass,
434 cmd_simple_func_ftype *fun,
435 const char *doc, struct cmd_list_element **subcommands,
436 int allow_unknown,
437 struct cmd_list_element **list,
438 int *suppress_notification);
439
440 extern struct cmd_list_element *add_abbrev_prefix_cmd (const char *,
441 enum command_class,
442 cmd_simple_func_ftype *fun,
443 const char *,
444 struct cmd_list_element
445 **, int,
446 struct cmd_list_element
447 **);
448
449 typedef void cmd_func_ftype (const char *args, int from_tty,
450 cmd_list_element *c);
451
452 /* A completion routine. Add possible completions to tracker.
453
454 TEXT is the text beyond what was matched for the command itself
455 (leading whitespace is skipped). It stops where we are supposed to
456 stop completing (rl_point) and is '\0' terminated. WORD points in
457 the same buffer as TEXT, and completions should be returned
458 relative to this position. For example, suppose TEXT is "foo" and
459 we want to complete to "foobar". If WORD is "oo", return "oobar";
460 if WORD is "baz/foo", return "baz/foobar". */
461 typedef void completer_ftype (struct cmd_list_element *,
462 completion_tracker &tracker,
463 const char *text, const char *word);
464
465 /* Same, but for set_cmd_completer_handle_brkchars. */
466 typedef void completer_handle_brkchars_ftype (struct cmd_list_element *,
467 completion_tracker &tracker,
468 const char *text, const char *word);
469
470 extern void set_cmd_completer (struct cmd_list_element *, completer_ftype *);
471
472 /* Set the completer_handle_brkchars callback. */
473
474 extern void set_cmd_completer_handle_brkchars (struct cmd_list_element *,
475 completer_handle_brkchars_ftype *);
476
477 /* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs
478 around in cmd objects to test the value of the commands sfunc(). */
479 extern int cmd_simple_func_eq (struct cmd_list_element *cmd,
480 cmd_simple_func_ftype *cfun);
481
482 /* Execute CMD's pre/post hook. Throw an error if the command fails.
483 If already executing this pre/post hook, or there is no pre/post
484 hook, the call is silently ignored. */
485 extern void execute_cmd_pre_hook (struct cmd_list_element *cmd);
486 extern void execute_cmd_post_hook (struct cmd_list_element *cmd);
487
488 /* Flag for an ambiguous cmd_list result. */
489 #define CMD_LIST_AMBIGUOUS ((struct cmd_list_element *) -1)
490
491 extern struct cmd_list_element *lookup_cmd (const char **,
492 struct cmd_list_element *,
493 const char *,
494 std::string *,
495 int, int);
496
497 /* This routine takes a line of TEXT and a CLIST in which to start the
498 lookup. When it returns it will have incremented the text pointer past
499 the section of text it matched, set *RESULT_LIST to point to the list in
500 which the last word was matched, and will return a pointer to the cmd
501 list element which the text matches. It will return NULL if no match at
502 all was possible. It will return -1 (cast appropriately, ick) if ambigous
503 matches are possible; in this case *RESULT_LIST will be set to point to
504 the list in which there are ambiguous choices (and *TEXT will be set to
505 the ambiguous text string).
506
507 if DEFAULT_ARGS is not null, *DEFAULT_ARGS is set to the found command
508 default args (possibly empty).
509
510 If the located command was an abbreviation, this routine returns the base
511 command of the abbreviation. Note that *DEFAULT_ARGS will contain the
512 default args defined for the alias.
513
514 It does no error reporting whatsoever; control will always return
515 to the superior routine.
516
517 In the case of an ambiguous return (-1), *RESULT_LIST will be set to point
518 at the prefix_command (ie. the best match) *or* (special case) will be NULL
519 if no prefix command was ever found. For example, in the case of "info a",
520 "info" matches without ambiguity, but "a" could be "args" or "address", so
521 *RESULT_LIST is set to the cmd_list_element for "info". So in this case
522 RESULT_LIST should not be interpreted as a pointer to the beginning of a
523 list; it simply points to a specific command. In the case of an ambiguous
524 return *TEXT is advanced past the last non-ambiguous prefix (e.g.
525 "info t" can be "info types" or "info target"; upon return *TEXT has been
526 advanced past "info ").
527
528 If RESULT_LIST is NULL, don't set *RESULT_LIST (but don't otherwise
529 affect the operation).
530
531 This routine does *not* modify the text pointed to by TEXT.
532
533 If IGNORE_HELP_CLASSES is nonzero, ignore any command list elements which
534 are actually help classes rather than commands (i.e. the function field of
535 the struct cmd_list_element is NULL).
536
537 When LOOKUP_FOR_COMPLETION_P is true the completion is being requested
538 for the completion engine, no warnings should be printed. */
539
540 extern struct cmd_list_element *lookup_cmd_1
541 (const char **text, struct cmd_list_element *clist,
542 struct cmd_list_element **result_list, std::string *default_args,
543 int ignore_help_classes, bool lookup_for_completion_p = false);
544
545 /* Look up the command called NAME in the command list LIST.
546
547 Unlike LOOKUP_CMD, partial matches are ignored and only exact matches
548 on NAME are considered.
549
550 LIST is a chain of struct cmd_list_element's.
551
552 If IGNORE_HELP_CLASSES is true (the default), ignore any command list
553 elements which are actually help classes rather than commands (i.e.
554 the function field of the struct cmd_list_element is null).
555
556 If found, return the struct cmd_list_element for that command,
557 otherwise return NULLPTR. */
558
559 extern struct cmd_list_element *lookup_cmd_exact
560 (const char *name,
561 struct cmd_list_element *list,
562 bool ignore_help_classes = true);
563
564 extern struct cmd_list_element *deprecate_cmd (struct cmd_list_element *,
565 const char * );
566
567 extern void deprecated_cmd_warning (const char *, struct cmd_list_element *);
568
569 extern int lookup_cmd_composition (const char *text,
570 struct cmd_list_element **alias,
571 struct cmd_list_element **prefix_cmd,
572 struct cmd_list_element **cmd);
573
574 extern struct cmd_list_element *add_com (const char *, enum command_class,
575 cmd_simple_func_ftype *fun,
576 const char *);
577
578 extern cmd_list_element *add_com_alias (const char *name,
579 cmd_list_element *target,
580 command_class theclass,
581 int abbrev_flag);
582
583 extern struct cmd_list_element *add_com_suppress_notification
584 (const char *name, enum command_class theclass,
585 cmd_simple_func_ftype *fun, const char *doc,
586 int *supress_notification);
587
588 extern struct cmd_list_element *add_info (const char *,
589 cmd_simple_func_ftype *fun,
590 const char *);
591
592 extern cmd_list_element *add_info_alias (const char *name,
593 cmd_list_element *target,
594 int abbrev_flag);
595
596 extern void complete_on_cmdlist (struct cmd_list_element *,
597 completion_tracker &tracker,
598 const char *, const char *, int);
599
600 extern void complete_on_enum (completion_tracker &tracker,
601 const char *const *enumlist,
602 const char *, const char *);
603
604 /* Functions that implement commands about CLI commands. */
605
606 extern void help_list (struct cmd_list_element *, const char *,
607 enum command_class, struct ui_file *);
608
609 /* Method for show a set/show variable's VALUE on FILE. If this
610 method isn't supplied deprecated_show_value_hack() is called (which
611 is not good). */
612 typedef void (show_value_ftype) (struct ui_file *file,
613 int from_tty,
614 struct cmd_list_element *cmd,
615 const char *value);
616 /* NOTE: i18n: This function is not i18n friendly. Callers should
617 instead print the value out directly. */
618 extern show_value_ftype deprecated_show_value_hack;
619
620 /* Return value type for the add_setshow_* functions. */
621
622 struct set_show_commands
623 {
624 cmd_list_element *set, *show;
625 };
626
627 extern set_show_commands add_setshow_enum_cmd
628 (const char *name, command_class theclass, const char *const *enumlist,
629 const char **var, const char *set_doc, const char *show_doc,
630 const char *help_doc, cmd_func_ftype *set_func,
631 show_value_ftype *show_func, cmd_list_element **set_list,
632 cmd_list_element **show_list);
633
634 extern set_show_commands add_setshow_enum_cmd
635 (const char *name, command_class theclass, const char *const *enumlist,
636 const char *set_doc, const char *show_doc,
637 const char *help_doc, setting_setter_ftype<const char *> set_func,
638 setting_getter_ftype<const char *> get_func, show_value_ftype *show_func,
639 cmd_list_element **set_list, cmd_list_element **show_list);
640
641 extern set_show_commands add_setshow_auto_boolean_cmd
642 (const char *name, command_class theclass, auto_boolean *var,
643 const char *set_doc, const char *show_doc, const char *help_doc,
644 cmd_func_ftype *set_func, show_value_ftype *show_func,
645 cmd_list_element **set_list, cmd_list_element **show_list);
646
647 extern set_show_commands add_setshow_auto_boolean_cmd
648 (const char *name, command_class theclass, const char *set_doc,
649 const char *show_doc, const char *help_doc,
650 setting_setter_ftype<enum auto_boolean> set_func,
651 setting_getter_ftype<enum auto_boolean> get_func,
652 show_value_ftype *show_func, cmd_list_element **set_list,
653 cmd_list_element **show_list);
654
655 extern set_show_commands add_setshow_boolean_cmd
656 (const char *name, command_class theclass, bool *var, const char *set_doc,
657 const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
658 show_value_ftype *show_func, cmd_list_element **set_list,
659 cmd_list_element **show_list);
660
661 extern set_show_commands add_setshow_boolean_cmd
662 (const char *name, command_class theclass, const char *set_doc,
663 const char *show_doc, const char *help_doc,
664 setting_setter_ftype<bool> set_func,
665 setting_getter_ftype<bool> get_func, show_value_ftype *show_func,
666 cmd_list_element **set_list, cmd_list_element **show_list);
667
668 extern set_show_commands add_setshow_filename_cmd
669 (const char *name, command_class theclass, std::string *var, const char *set_doc,
670 const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
671 show_value_ftype *show_func, cmd_list_element **set_list,
672 cmd_list_element **show_list);
673
674 extern set_show_commands add_setshow_filename_cmd
675 (const char *name, command_class theclass, const char *set_doc,
676 const char *show_doc, const char *help_doc,
677 setting_setter_ftype<std::string> set_func,
678 setting_getter_ftype<std::string> get_func, show_value_ftype *show_func,
679 cmd_list_element **set_list, cmd_list_element **show_list);
680
681 extern set_show_commands add_setshow_string_cmd
682 (const char *name, command_class theclass, std::string *var, const char *set_doc,
683 const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
684 show_value_ftype *show_func, cmd_list_element **set_list,
685 cmd_list_element **show_list);
686
687 extern set_show_commands add_setshow_string_cmd
688 (const char *name, command_class theclass, const char *set_doc,
689 const char *show_doc, const char *help_doc,
690 setting_setter_ftype<std::string> set_func,
691 setting_getter_ftype<std::string> get_func,
692 show_value_ftype *show_func, cmd_list_element **set_list,
693 cmd_list_element **show_list);
694
695 extern set_show_commands add_setshow_string_noescape_cmd
696 (const char *name, command_class theclass, std::string *var, const char *set_doc,
697 const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
698 show_value_ftype *show_func, cmd_list_element **set_list,
699 cmd_list_element **show_list);
700
701 extern set_show_commands add_setshow_string_noescape_cmd
702 (const char *name, command_class theclass, const char *set_doc,
703 const char *show_doc, const char *help_doc,
704 setting_setter_ftype<std::string> set_func,
705 setting_getter_ftype<std::string> get_func, show_value_ftype *show_func,
706 cmd_list_element **set_list, cmd_list_element **show_list);
707
708 extern set_show_commands add_setshow_optional_filename_cmd
709 (const char *name, command_class theclass, std::string *var, const char *set_doc,
710 const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
711 show_value_ftype *show_func, cmd_list_element **set_list,
712 cmd_list_element **show_list);
713
714 extern set_show_commands add_setshow_optional_filename_cmd
715 (const char *name, command_class theclass, const char *set_doc,
716 const char *show_doc, const char *help_doc,
717 setting_setter_ftype<std::string> set_func,
718 setting_getter_ftype<std::string> get_func,
719 show_value_ftype *show_func, cmd_list_element **set_list,
720 cmd_list_element **show_list);
721
722 extern set_show_commands add_setshow_integer_cmd
723 (const char *name, command_class theclass, int *var, const char *set_doc,
724 const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
725 show_value_ftype *show_func, cmd_list_element **set_list,
726 cmd_list_element **show_list);
727
728 extern set_show_commands add_setshow_integer_cmd
729 (const char *name, command_class theclass, const char *set_doc,
730 const char *show_doc, const char *help_doc,
731 setting_setter_ftype<int> set_func,
732 setting_getter_ftype<int> get_func, show_value_ftype *show_func,
733 cmd_list_element **set_list, cmd_list_element **show_list);
734
735 extern set_show_commands add_setshow_uinteger_cmd
736 (const char *name, command_class theclass, unsigned int *var,
737 const char *set_doc, const char *show_doc, const char *help_doc,
738 cmd_func_ftype *set_func, show_value_ftype *show_func,
739 cmd_list_element **set_list, cmd_list_element **show_list);
740
741 extern set_show_commands add_setshow_uinteger_cmd
742 (const char *name, command_class theclass, const char *set_doc,
743 const char *show_doc, const char *help_doc,
744 setting_setter_ftype<unsigned int> set_func,
745 setting_getter_ftype<unsigned int> get_func, show_value_ftype *show_func,
746 cmd_list_element **set_list, cmd_list_element **show_list);
747
748 extern set_show_commands add_setshow_zinteger_cmd
749 (const char *name, command_class theclass, int *var, const char *set_doc,
750 const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
751 show_value_ftype *show_func, cmd_list_element **set_list,
752 cmd_list_element **show_list);
753
754 extern set_show_commands add_setshow_zinteger_cmd
755 (const char *name, command_class theclass, const char *set_doc,
756 const char *show_doc, const char *help_doc,
757 setting_setter_ftype<int> set_func,
758 setting_getter_ftype<int> get_func, show_value_ftype *show_func,
759 cmd_list_element **set_list, cmd_list_element **show_list);
760
761 extern set_show_commands add_setshow_zuinteger_cmd
762 (const char *name, command_class theclass, unsigned int *var,
763 const char *set_doc, const char *show_doc, const char *help_doc,
764 cmd_func_ftype *set_func, show_value_ftype *show_func,
765 cmd_list_element **set_list, cmd_list_element **show_list);
766
767 extern set_show_commands add_setshow_zuinteger_cmd
768 (const char *name, command_class theclass, const char *set_doc,
769 const char *show_doc, const char *help_doc,
770 setting_setter_ftype<unsigned int> set_func,
771 setting_getter_ftype<unsigned int> get_func, show_value_ftype *show_func,
772 cmd_list_element **set_list, cmd_list_element **show_list);
773
774 extern set_show_commands add_setshow_zuinteger_unlimited_cmd
775 (const char *name, command_class theclass, int *var, const char *set_doc,
776 const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
777 show_value_ftype *show_func, cmd_list_element **set_list,
778 cmd_list_element **show_list);
779
780 extern set_show_commands add_setshow_zuinteger_unlimited_cmd
781 (const char *name, command_class theclass, const char *set_doc,
782 const char *show_doc, const char *help_doc,
783 setting_setter_ftype<int> set_func, setting_getter_ftype<int> get_func,
784 show_value_ftype *show_func, cmd_list_element **set_list,
785 cmd_list_element **show_list);
786
787 /* Do a "show" command for each thing on a command list. */
788
789 extern void cmd_show_list (struct cmd_list_element *, int);
790
791 /* Used everywhere whenever at least one parameter is required and
792 none is specified. */
793
794 extern void error_no_arg (const char *) ATTRIBUTE_NORETURN;
795
796
797 /* Command line saving and repetition.
798 Each input line executed is saved to possibly be repeated either
799 when the user types an empty line, or be repeated by a command
800 that wants to repeat the previously executed command. The below
801 functions control command repetition. */
802
803 /* Commands call dont_repeat if they do not want to be repeated by null
804 lines or by repeat_previous (). */
805
806 extern void dont_repeat ();
807
808 /* Commands call repeat_previous if they want to repeat the previous
809 command. Such commands that repeat the previous command must
810 indicate to not repeat themselves, to avoid recursive repeat.
811 repeat_previous marks the current command as not repeating, and
812 ensures get_saved_command_line returns the previous command, so
813 that the currently executing command can repeat it. If there's no
814 previous command, throws an error. Otherwise, returns the result
815 of get_saved_command_line, which now points at the command to
816 repeat. */
817
818 extern const char *repeat_previous ();
819
820 /* Prevent dont_repeat from working, and return a cleanup that
821 restores the previous state. */
822
823 extern scoped_restore_tmpl<int> prevent_dont_repeat (void);
824
825 /* Set the arguments that will be passed if the current command is
826 repeated. Note that the passed-in string must be a constant. */
827
828 extern void set_repeat_arguments (const char *args);
829
830 /* Returns the saved command line to repeat.
831 When a command is being executed, this is the currently executing
832 command line, unless the currently executing command has called
833 repeat_previous (): in this case, get_saved_command_line returns
834 the previously saved command line. */
835
836 extern char *get_saved_command_line ();
837
838 /* Takes a copy of CMD, for possible repetition. */
839
840 extern void save_command_line (const char *cmd);
841
842 /* Used to mark commands that don't do anything. If we just leave the
843 function field NULL, the command is interpreted as a help topic, or
844 as a class of commands. */
845
846 extern void not_just_help_class_command (const char *, int);
847
848 /* Call the command function. */
849 extern void cmd_func (struct cmd_list_element *cmd,
850 const char *args, int from_tty);
851
852 #endif /* !defined (COMMAND_H) */