/* Header file for GDB command decoding library.
- Copyright (c) 2000, 2003, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2000-2013 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#if !defined (CLI_DECODE_H)
#define CLI_DECODE_H 1
+/* This file defines the private interfaces for any code implementing
+ command internals. */
+
+/* Include the public interfaces. */
#include "command.h"
struct re_pattern_buffer;
/* This structure records one command'd definition. */
-/* This flag is used by the code executing commands to warn the user
- the first time a deprecated command is used, see the 'flags' field in
- the following struct.
+/* This flag is used by the code executing commands to warn the user
+ the first time a deprecated command is used, see the 'flags' field
+ in the following struct.
*/
#define CMD_DEPRECATED 0x1
#define DEPRECATED_WARN_USER 0x2
#define MALLOCED_REPLACEMENT 0x4
+#define DOC_ALLOCATED 0x8
struct cmd_list_element
{
/* flags : a bitfield
bit 0: (LSB) CMD_DEPRECATED, when 1 indicated that this command
- is deprecated. It may be removed from gdb's command set in the
+ is deprecated. It may be removed from gdb's command set in the
future.
bit 1: DEPRECATED_WARN_USER, the user needs to be warned that
memory for replacement is malloc'ed. When a command is
undeprecated or re-deprecated at runtime we don't want to risk
calling free on statically allocated memory, so we check this
- flag.
- */
+ flag.
+
+ bit 3: DOC_ALLOCATED, set if the doc field should be xfree'd. */
+
int flags;
/* If this command is deprecated, this is the replacement name. */
/* Hook for another command to be executed after this command. */
struct cmd_list_element *hook_post;
- /* Flag that specifies if this command is already running it's hook. */
+ /* Flag that specifies if this command is already running its hook. */
/* Prevents the possibility of hook recursion. */
int hook_in;
recognized; call the prefix's own function in that case. */
char allow_unknown;
+ /* The prefix command of this command. */
+ struct cmd_list_element *prefix;
+
/* Nonzero says this is an abbreviation, and should not
be mentioned in lists of commands.
This allows "br<tab>" to complete to "break", which it
skipped). It stops where we are supposed to stop completing
(rl_point) and is '\0' terminated.
- Return value is a malloc'd vector of pointers to possible completions
- terminated with NULL. If there are no completions, returning a pointer
- to a NULL would work but returning NULL itself is also valid.
- WORD points in the same buffer as TEXT, and completions should be
- returned relative to this position. For example, suppose TEXT is "foo"
- and we want to complete to "foobar". If WORD is "oo", return
- "oobar"; if WORD is "baz/foo", return "baz/foobar". */
- char **(*completer) (char *text, char *word);
+ Return value is a malloc'd vector of pointers to possible
+ completions terminated with NULL. If there are no completions,
+ returning a pointer to a NULL would work but returning NULL
+ itself is also valid. WORD points in the same buffer as TEXT,
+ and completions should be returned relative to this position.
+ For example, suppose TEXT is "foo" and we want to complete to
+ "foobar". If WORD is "oo", return "oobar"; if WORD is
+ "baz/foo", return "baz/foobar". */
+ completer_ftype *completer;
+
+ /* Destruction routine for this command. If non-NULL, this is
+ called when this command instance is destroyed. This may be
+ used to finalize the CONTEXT field, if needed. */
+ void (*destroyer) (struct cmd_list_element *self, void *context);
/* Type of "set" or "show" command (or SET_NOT_SET if not "set"
or "show"). */
cmd_types type;
- /* Pointer to variable affected by "set" and "show". Doesn't matter
- if type is not_set. */
+ /* Pointer to variable affected by "set" and "show". Doesn't
+ matter if type is not_set. */
void *var;
/* What kind of variable is *VAR? */
var_types var_type;
- /* Pointer to NULL terminated list of enumerated values (like argv). */
- const char **enums;
+ /* Pointer to NULL terminated list of enumerated values (like
+ argv). */
+ const char *const *enums;
/* Pointer to command strings of user-defined commands */
struct command_line *user_commands;
/* Pointer to command that is aliased by this one, so the
aliased command can be located in case it has been hooked. */
struct cmd_list_element *cmd_pointer;
- };
-
-/* API to the manipulation of command lists. */
-
-extern struct cmd_list_element *add_cmd (char *, enum command_class,
- void (*fun) (char *, int), char *,
- struct cmd_list_element **);
-
-extern struct cmd_list_element *add_alias_cmd (char *, char *,
- enum command_class, int,
- struct cmd_list_element **);
-
-extern struct cmd_list_element *add_prefix_cmd (char *, enum command_class,
- void (*fun) (char *, int),
- char *,
- struct cmd_list_element **,
- char *, int,
- struct cmd_list_element **);
-
-extern struct cmd_list_element *add_abbrev_prefix_cmd (char *,
- enum command_class,
- void (*fun) (char *,
- int),
- char *,
- struct cmd_list_element
- **, char *, int,
- struct cmd_list_element
- **);
-
-/* Set the commands corresponding callback. */
-
-extern void set_cmd_cfunc (struct cmd_list_element *cmd,
- void (*cfunc) (char *args, int from_tty));
-
-extern void set_cmd_sfunc (struct cmd_list_element *cmd,
- void (*sfunc) (char *args, int from_tty,
- struct cmd_list_element * c));
-
-extern void set_cmd_completer (struct cmd_list_element *cmd,
- char **(*completer) (char *text, char *word));
-/* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs
- around in cmd objects to test the value of the commands sfunc(). */
-extern int cmd_cfunc_eq (struct cmd_list_element *cmd,
- void (*cfunc) (char *args, int from_tty));
+ /* Start of a linked list of all aliases of this command. */
+ struct cmd_list_element *aliases;
-/* Access to the command's local context. */
-extern void set_cmd_context (struct cmd_list_element *cmd, void *context);
-extern void *get_cmd_context (struct cmd_list_element *cmd);
-
-extern struct cmd_list_element *lookup_cmd (char **,
- struct cmd_list_element *, char *,
- int, int);
-
-extern struct cmd_list_element *lookup_cmd_1 (char **,
- struct cmd_list_element *,
- struct cmd_list_element **,
- int);
-
-extern struct cmd_list_element *
- deprecate_cmd (struct cmd_list_element *, char * );
-
-extern void
- deprecated_cmd_warning (char **);
-
-extern int
- lookup_cmd_composition (char *text,
- struct cmd_list_element **alias,
- struct cmd_list_element **prefix_cmd,
- struct cmd_list_element **cmd);
-
-extern struct cmd_list_element *add_com (char *, enum command_class,
- void (*fun) (char *, int), char *);
-
-extern struct cmd_list_element *add_com_alias (char *, char *,
- enum command_class, int);
-
-extern struct cmd_list_element *add_info (char *, void (*fun) (char *, int),
- char *);
-
-extern struct cmd_list_element *add_info_alias (char *, char *, int);
-
-extern char **complete_on_cmdlist (struct cmd_list_element *, char *, char *);
-
-extern char **complete_on_enum (const char *enumlist[], char *, char *);
-
-extern void delete_cmd (char *, struct cmd_list_element **);
+ /* Link pointer for aliases on an alias list. */
+ struct cmd_list_element *alias_chain;
+ };
extern void help_cmd_list (struct cmd_list_element *, enum command_class,
char *, int, struct ui_file *);
-/* Functions that implement commands about CLI commands. */
+/* Functions that implement commands about CLI commands. */
extern void help_cmd (char *, struct ui_file *);
-extern void help_list (struct cmd_list_element *, char *,
- enum command_class, struct ui_file *);
-
extern void apropos_cmd (struct ui_file *, struct cmd_list_element *,
struct re_pattern_buffer *, char *);
extern void print_doc_line (struct ui_file *, char *);
+extern const char * const auto_boolean_enums[];
#endif /* !defined (CLI_DECODE_H) */