summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/binutils/gdb
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@cvs.openbsd.org>2004-12-27 21:03:55 +0000
committerMark Kettenis <kettenis@cvs.openbsd.org>2004-12-27 21:03:55 +0000
commite444e031e285774704f9c5be30a382edc9f713d7 (patch)
tree706b923b1374de3d63f01159c65fada57b50eb31 /gnu/usr.bin/binutils/gdb
parentd4231dd9c8e7af5646b4cab9d2cb897aff96bf2d (diff)
Add add_setshow_enum_cmd.
Diffstat (limited to 'gnu/usr.bin/binutils/gdb')
-rw-r--r--gnu/usr.bin/binutils/gdb/cli/cli-decode.c186
-rw-r--r--gnu/usr.bin/binutils/gdb/command.h12
2 files changed, 148 insertions, 50 deletions
diff --git a/gnu/usr.bin/binutils/gdb/cli/cli-decode.c b/gnu/usr.bin/binutils/gdb/cli/cli-decode.c
index 43f2f257304..4c6c89c599b 100644
--- a/gnu/usr.bin/binutils/gdb/cli/cli-decode.c
+++ b/gnu/usr.bin/binutils/gdb/cli/cli-decode.c
@@ -1,6 +1,6 @@
/* Handle lists of commands, their decoding and documentation, for GDB.
- Copyright 1986, 1989, 1990, 1991, 1998, 2000, 2001, 2002 Free
+ Copyright 1986, 1989, 1990, 1991, 1998, 2000, 2001, 2002, 2004 Free
Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
@@ -320,16 +320,19 @@ add_set_or_show_cmd (char *name,
CLASS is as in add_cmd. VAR_TYPE is the kind of thing we are
setting. VAR is address of the variable being controlled by this
command. SET_FUNC and SHOW_FUNC are the callback functions (if
- non-NULL). SET_DOC and SHOW_DOC are the documentation strings.
- SET_RESULT and SHOW_RESULT, if not NULL, are set to the resulting
- command structures. */
+ non-NULL). SET_DOC, SHOW_DOC and HELP_DOC are the documentation
+ strings. PRINT the format string to print the value. SET_RESULT
+ and SHOW_RESULT, if not NULL, are set to the resulting command
+ structures. */
-void
+static void
add_setshow_cmd_full (char *name,
enum command_class class,
var_types var_type, void *var,
- char *set_doc, char *show_doc,
- cmd_sfunc_ftype *set_func, cmd_sfunc_ftype *show_func,
+ const char *set_doc, const char *show_doc,
+ const char *help_doc, const char *print,
+ cmd_sfunc_ftype *set_func,
+ cmd_sfunc_ftype *show_func,
struct cmd_list_element **set_list,
struct cmd_list_element **show_list,
struct cmd_list_element **set_result,
@@ -337,12 +340,25 @@ add_setshow_cmd_full (char *name,
{
struct cmd_list_element *set;
struct cmd_list_element *show;
+ char *full_set_doc;
+ char *full_show_doc;
+
+ if (help_doc != NULL)
+ {
+ full_set_doc = xstrprintf ("%s\n%s", set_doc, help_doc);
+ full_show_doc = xstrprintf ("%s\n%s", show_doc, help_doc);
+ }
+ else
+ {
+ full_set_doc = xstrdup (set_doc);
+ full_show_doc = xstrdup (show_doc);
+ }
set = add_set_or_show_cmd (name, set_cmd, class, var_type, var,
- set_doc, set_list);
+ full_set_doc, set_list);
if (set_func != NULL)
set_cmd_sfunc (set, set_func);
show = add_set_or_show_cmd (name, show_cmd, class, var_type, var,
- show_doc, show_list);
+ full_show_doc, show_list);
if (show_func != NULL)
set_cmd_sfunc (show, show_func);
@@ -352,26 +368,6 @@ add_setshow_cmd_full (char *name,
*show_result = show;
}
-/* Add element named NAME to both the command SET_LIST and SHOW_LIST.
- CLASS is as in add_cmd. VAR_TYPE is the kind of thing we are
- setting. VAR is address of the variable being controlled by this
- command. SET_FUNC and SHOW_FUNC are the callback functions (if
- non-NULL). SET_DOC and SHOW_DOC are the documentation strings. */
-
-void
-add_setshow_cmd (char *name,
- enum command_class class,
- var_types var_type, void *var,
- char *set_doc, char *show_doc,
- cmd_sfunc_ftype *set_func, cmd_sfunc_ftype *show_func,
- struct cmd_list_element **set_list,
- struct cmd_list_element **show_list)
-{
- add_setshow_cmd_full (name, class, var_type, var, set_doc, show_doc,
- set_func, show_func, set_list, show_list,
- NULL, NULL);
-}
-
struct cmd_list_element *
add_set_cmd (char *name,
enum command_class class,
@@ -406,6 +402,34 @@ add_set_enum_cmd (char *name,
return c;
}
+/* Add element named NAME to command list LIST (the list for set or
+ some sublist thereof). CLASS is as in add_cmd. ENUMLIST is a list
+ of strings which may follow NAME. VAR is address of the variable
+ which will contain the matching string (from ENUMLIST). */
+
+void
+add_setshow_enum_cmd (char *name,
+ enum command_class class,
+ const char *enumlist[],
+ const char **var,
+ const char *set_doc,
+ const char *show_doc,
+ const char *help_doc,
+ const char *print,
+ cmd_sfunc_ftype *set_func,
+ cmd_sfunc_ftype *show_func,
+ struct cmd_list_element **set_list,
+ struct cmd_list_element **show_list)
+{
+ struct cmd_list_element *c;
+ add_setshow_cmd_full (name, class, var_enum, var,
+ set_doc, show_doc, help_doc, print,
+ set_func, show_func,
+ set_list, show_list,
+ &c, NULL);
+ c->enums = enumlist;
+}
+
/* Add an auto-boolean command named NAME to both the set and show
command list lists. CLASS is as in add_cmd. VAR is address of the
variable which will contain the value. DOC is the documentation
@@ -414,7 +438,8 @@ void
add_setshow_auto_boolean_cmd (char *name,
enum command_class class,
enum auto_boolean *var,
- char *set_doc, char *show_doc,
+ const char *set_doc, const char *show_doc,
+ const char *help_doc, const char *print,
cmd_sfunc_ftype *set_func,
cmd_sfunc_ftype *show_func,
struct cmd_list_element **set_list,
@@ -423,7 +448,8 @@ add_setshow_auto_boolean_cmd (char *name,
static const char *auto_boolean_enums[] = { "on", "off", "auto", NULL };
struct cmd_list_element *c;
add_setshow_cmd_full (name, class, var_auto_boolean, var,
- set_doc, show_doc, set_func, show_func,
+ set_doc, show_doc, help_doc, print,
+ set_func, show_func,
set_list, show_list,
&c, NULL);
c->enums = auto_boolean_enums;
@@ -432,11 +458,11 @@ add_setshow_auto_boolean_cmd (char *name,
/* Add element named NAME to both the set and show command LISTs (the
list for set/show or some sublist thereof). CLASS is as in
add_cmd. VAR is address of the variable which will contain the
- value. SET_DOC and SHOW_DOR are the documentation strings. */
+ value. SET_DOC and SHOW_DOC are the documentation strings. */
void
-add_setshow_boolean_cmd (char *name,
- enum command_class class,
- int *var, char *set_doc, char *show_doc,
+add_setshow_boolean_cmd (char *name, enum command_class class, int *var,
+ const char *set_doc, const char *show_doc,
+ const char *help_doc, const char *print,
cmd_sfunc_ftype *set_func,
cmd_sfunc_ftype *show_func,
struct cmd_list_element **set_list,
@@ -445,7 +471,7 @@ add_setshow_boolean_cmd (char *name,
static const char *boolean_enums[] = { "on", "off", NULL };
struct cmd_list_element *c;
add_setshow_cmd_full (name, class, var_boolean, var,
- set_doc, show_doc,
+ set_doc, show_doc, help_doc, print,
set_func, show_func,
set_list, show_list,
&c, NULL);
@@ -453,20 +479,80 @@ add_setshow_boolean_cmd (char *name,
}
/* Add element named NAME to both the set and show command LISTs (the
+ list for set/show or some sublist thereof). */
+void
+add_setshow_filename_cmd (char *name, enum command_class class,
+ char **var,
+ const char *set_doc, const char *show_doc,
+ const char *help_doc, const char *print,
+ cmd_sfunc_ftype *set_func,
+ cmd_sfunc_ftype *show_func,
+ struct cmd_list_element **set_list,
+ struct cmd_list_element **show_list)
+{
+ add_setshow_cmd_full (name, class, var_filename, var,
+ set_doc, show_doc, help_doc, print,
+ set_func, show_func,
+ set_list, show_list,
+ NULL, NULL);
+}
+
+/* Add element named NAME to both the set and show command LISTs (the
+ list for set/show or some sublist thereof). */
+void
+add_setshow_string_cmd (char *name, enum command_class class,
+ char **var,
+ const char *set_doc, const char *show_doc,
+ const char *help_doc, const char *print,
+ cmd_sfunc_ftype *set_func,
+ cmd_sfunc_ftype *show_func,
+ struct cmd_list_element **set_list,
+ struct cmd_list_element **show_list)
+{
+ add_setshow_cmd_full (name, class, var_string, var,
+ set_doc, show_doc, help_doc, print,
+ set_func, show_func,
+ set_list, show_list,
+ NULL, NULL);
+}
+
+/* Add element named NAME to both the set and show command LISTs (the
list for set/show or some sublist thereof). CLASS is as in
add_cmd. VAR is address of the variable which will contain the
- value. SET_DOC and SHOW_DOR are the documentation strings. */
+ value. SET_DOC and SHOW_DOC are the documentation strings. */
void
-add_setshow_uinteger_cmd (char *name,
- enum command_class class,
- unsigned int *var, char *set_doc, char *show_doc,
+add_setshow_uinteger_cmd (char *name, enum command_class class,
+ unsigned int *var,
+ const char *set_doc, const char *show_doc,
+ const char *help_doc, const char *print,
cmd_sfunc_ftype *set_func,
cmd_sfunc_ftype *show_func,
struct cmd_list_element **set_list,
struct cmd_list_element **show_list)
{
add_setshow_cmd_full (name, class, var_uinteger, var,
- set_doc, show_doc,
+ set_doc, show_doc, help_doc, print,
+ set_func, show_func,
+ set_list, show_list,
+ NULL, NULL);
+}
+
+/* Add element named NAME to both the set and show command LISTs (the
+ list for set/show or some sublist thereof). CLASS is as in
+ add_cmd. VAR is address of the variable which will contain the
+ value. SET_DOC and SHOW_DOC are the documentation strings. */
+void
+add_setshow_zinteger_cmd (char *name, enum command_class class,
+ int *var,
+ const char *set_doc, const char *show_doc,
+ const char *help_doc, const char *print,
+ cmd_sfunc_ftype *set_func,
+ cmd_sfunc_ftype *show_func,
+ struct cmd_list_element **set_list,
+ struct cmd_list_element **show_list)
+{
+ add_setshow_cmd_full (name, class, var_zinteger, var,
+ set_doc, show_doc, help_doc, print,
set_func, show_func,
set_list, show_list,
NULL, NULL);
@@ -475,16 +561,16 @@ add_setshow_uinteger_cmd (char *name,
/* Where SETCMD has already been added, add the corresponding show
command to LIST and return a pointer to the added command (not
necessarily the head of LIST). */
-/* NOTE: cagney/2002-03-17: The original version of add_show_from_set
- used memcpy() to clone `set' into `show'. This meant that in
- addition to all the needed fields (var, name, et.al.) some
- unnecessary fields were copied (namely the callback function). The
- function explictly copies relevant fields. For a `set' and `show'
- command to share the same callback, the caller must set both
- explicitly. */
+/* NOTE: cagney/2002-03-17: The original version of
+ deprecated_add_show_from_set used memcpy() to clone `set' into
+ `show'. This meant that in addition to all the needed fields (var,
+ name, et.al.) some unnecessary fields were copied (namely the
+ callback function). The function explictly copies relevant fields.
+ For a `set' and `show' command to share the same callback, the
+ caller must set both explicitly. */
struct cmd_list_element *
-add_show_from_set (struct cmd_list_element *setcmd,
- struct cmd_list_element **list)
+deprecated_add_show_from_set (struct cmd_list_element *setcmd,
+ struct cmd_list_element **list)
{
char *doc;
const static char setstring[] = "Set ";
diff --git a/gnu/usr.bin/binutils/gdb/command.h b/gnu/usr.bin/binutils/gdb/command.h
index 8c0461377d1..5b7a5424c29 100644
--- a/gnu/usr.bin/binutils/gdb/command.h
+++ b/gnu/usr.bin/binutils/gdb/command.h
@@ -223,6 +223,18 @@ extern struct cmd_list_element *add_set_enum_cmd (char *name,
const char **var,
char *doc,
struct cmd_list_element **list);
+extern void add_setshow_enum_cmd (char *name,
+ enum command_class class,
+ const char *enumlist[],
+ const char **var,
+ const char *set_doc,
+ const char *show_doc,
+ const char *help_doc,
+ const char *print,
+ cmd_sfunc_ftype *set_func,
+ cmd_sfunc_ftype *show_func,
+ struct cmd_list_element **set_list,
+ struct cmd_list_element **show_list);
extern void add_setshow_auto_boolean_cmd (char *name,
enum command_class class,