GDB (API)
/home/stan/gdb/src/gdb/cli/cli-decode.h
Go to the documentation of this file.
00001 /* Header file for GDB command decoding library.
00002 
00003    Copyright (C) 2000-2013 Free Software Foundation, Inc.
00004 
00005    This program is free software; you can redistribute it and/or modify
00006    it under the terms of the GNU General Public License as published by
00007    the Free Software Foundation; either version 3 of the License, or
00008    (at your option) any later version.
00009 
00010    This program is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013    GNU General Public License for more details.
00014 
00015    You should have received a copy of the GNU General Public License
00016    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
00017 
00018 #if !defined (CLI_DECODE_H)
00019 #define CLI_DECODE_H 1
00020 
00021 /* This file defines the private interfaces for any code implementing
00022    command internals.  */
00023 
00024 /* Include the public interfaces.  */
00025 #include "command.h"
00026 
00027 struct re_pattern_buffer;
00028 
00029 #if 0
00030 /* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
00031    cmd_types'' can be moved from "command.h" to "cli-decode.h".  */
00032 /* Not a set/show command.  Note that some commands which begin with
00033    "set" or "show" might be in this category, if their syntax does
00034    not fall into one of the following categories.  */
00035 typedef enum cmd_types
00036   {
00037     not_set_cmd,
00038     set_cmd,
00039     show_cmd
00040   }
00041 cmd_types;
00042 #endif
00043 
00044 /* This structure records one command'd definition.  */
00045 
00046 
00047 /* This flag is used by the code executing commands to warn the user
00048    the first time a deprecated command is used, see the 'flags' field
00049    in the following struct.
00050 */
00051 #define CMD_DEPRECATED            0x1
00052 #define DEPRECATED_WARN_USER      0x2
00053 #define MALLOCED_REPLACEMENT      0x4
00054 #define DOC_ALLOCATED             0x8
00055 
00056 struct cmd_list_element
00057   {
00058     /* Points to next command in this list.  */
00059     struct cmd_list_element *next;
00060 
00061     /* Name of this command.  */
00062     const char *name;
00063 
00064     /* Command class; class values are chosen by application program.  */
00065     enum command_class class;
00066 
00067     /* Function definition of this command.  NULL for command class
00068        names and for help topics that are not really commands.  NOTE:
00069        cagney/2002-02-02: This function signature is evolving.  For
00070        the moment suggest sticking with either set_cmd_cfunc() or
00071        set_cmd_sfunc().  */
00072     void (*func) (struct cmd_list_element *c, char *args, int from_tty);
00073     /* The command's real callback.  At present func() bounces through
00074        to one of the below.  */
00075     union
00076       {
00077         /* If type is not_set_cmd, call it like this: */
00078         cmd_cfunc_ftype *cfunc;
00079         /* If type is set_cmd or show_cmd, first set the variables,
00080            and then call this: */
00081         cmd_sfunc_ftype *sfunc;
00082       }
00083     function;
00084 
00085     /* Local state (context) for this command.  This can be anything.  */
00086     void *context;
00087 
00088     /* Documentation of this command (or help topic).
00089        First line is brief documentation; remaining lines form, with it,
00090        the full documentation.  First line should end with a period.
00091        Entire string should also end with a period, not a newline.  */
00092     char *doc;
00093 
00094     /* For set/show commands.  A method for printing the output to the
00095        specified stream.  */
00096     show_value_ftype *show_value_func;
00097 
00098     /* flags : a bitfield 
00099        
00100        bit 0: (LSB) CMD_DEPRECATED, when 1 indicated that this command
00101        is deprecated.  It may be removed from gdb's command set in the
00102        future.
00103 
00104        bit 1: DEPRECATED_WARN_USER, the user needs to be warned that
00105        this is a deprecated command.  The user should only be warned
00106        the first time a command is used.
00107         
00108        bit 2: MALLOCED_REPLACEMENT, when functions are deprecated at
00109        compile time (this is the way it should, in general, be done)
00110        the memory containing the replacement string is statically
00111        allocated.  In some cases it makes sense to deprecate commands
00112        at runtime (the testsuite is one example).  In this case the
00113        memory for replacement is malloc'ed.  When a command is
00114        undeprecated or re-deprecated at runtime we don't want to risk
00115        calling free on statically allocated memory, so we check this
00116        flag.
00117 
00118        bit 3: DOC_ALLOCATED, set if the doc field should be xfree'd.  */
00119 
00120     int flags;
00121 
00122     /* If this command is deprecated, this is the replacement name.  */
00123     char *replacement;
00124 
00125     /* If this command represents a show command, then this function
00126        is called before the variable's value is examined.  */
00127     void (*pre_show_hook) (struct cmd_list_element *c);
00128 
00129     /* Hook for another command to be executed before this command.  */
00130     struct cmd_list_element *hook_pre;
00131 
00132     /* Hook for another command to be executed after this command.  */
00133     struct cmd_list_element *hook_post;
00134 
00135     /* Flag that specifies if this command is already running its hook.  */
00136     /* Prevents the possibility of hook recursion.  */
00137     int hook_in;
00138 
00139     /* Nonzero identifies a prefix command.  For them, the address
00140        of the variable containing the list of subcommands.  */
00141     struct cmd_list_element **prefixlist;
00142 
00143     /* For prefix commands only:
00144        String containing prefix commands to get here: this one
00145        plus any others needed to get to it.  Should end in a space.
00146        It is used before the word "command" in describing the
00147        commands reached through this prefix.  */
00148     char *prefixname;
00149 
00150     /* For prefix commands only:
00151        nonzero means do not get an error if subcommand is not
00152        recognized; call the prefix's own function in that case.  */
00153     char allow_unknown;
00154 
00155     /* The prefix command of this command.  */
00156     struct cmd_list_element *prefix;
00157 
00158     /* Nonzero says this is an abbreviation, and should not
00159        be mentioned in lists of commands.
00160        This allows "br<tab>" to complete to "break", which it
00161        otherwise wouldn't.  */
00162     char abbrev_flag;
00163 
00164     /* Completion routine for this command.  TEXT is the text beyond
00165        what was matched for the command itself (leading whitespace is
00166        skipped).  It stops where we are supposed to stop completing
00167        (rl_point) and is '\0' terminated.
00168 
00169        Return value is a malloc'd vector of pointers to possible
00170        completions terminated with NULL.  If there are no completions,
00171        returning a pointer to a NULL would work but returning NULL
00172        itself is also valid.  WORD points in the same buffer as TEXT,
00173        and completions should be returned relative to this position.
00174        For example, suppose TEXT is "foo" and we want to complete to
00175        "foobar".  If WORD is "oo", return "oobar"; if WORD is
00176        "baz/foo", return "baz/foobar".  */
00177     completer_ftype *completer;
00178 
00179     /* Destruction routine for this command.  If non-NULL, this is
00180        called when this command instance is destroyed.  This may be
00181        used to finalize the CONTEXT field, if needed.  */
00182     void (*destroyer) (struct cmd_list_element *self, void *context);
00183 
00184     /* Type of "set" or "show" command (or SET_NOT_SET if not "set"
00185        or "show").  */
00186     cmd_types type;
00187 
00188     /* Pointer to variable affected by "set" and "show".  Doesn't
00189        matter if type is not_set.  */
00190     void *var;
00191 
00192     /* What kind of variable is *VAR?  */
00193     var_types var_type;
00194 
00195     /* Pointer to NULL terminated list of enumerated values (like
00196        argv).  */
00197     const char *const *enums;
00198 
00199     /* Pointer to command strings of user-defined commands */
00200     struct command_line *user_commands;
00201 
00202     /* Pointer to command that is hooked by this one, (by hook_pre)
00203        so the hook can be removed when this one is deleted.  */
00204     struct cmd_list_element *hookee_pre;
00205 
00206     /* Pointer to command that is hooked by this one, (by hook_post)
00207        so the hook can be removed when this one is deleted.  */
00208     struct cmd_list_element *hookee_post;
00209 
00210     /* Pointer to command that is aliased by this one, so the
00211        aliased command can be located in case it has been hooked.  */
00212     struct cmd_list_element *cmd_pointer;
00213 
00214     /* Start of a linked list of all aliases of this command.  */
00215     struct cmd_list_element *aliases;
00216 
00217     /* Link pointer for aliases on an alias list.  */
00218     struct cmd_list_element *alias_chain;
00219   };
00220 
00221 extern void help_cmd_list (struct cmd_list_element *, enum command_class,
00222                            char *, int, struct ui_file *);
00223 
00224 /* Functions that implement commands about CLI commands.  */
00225 
00226 extern void help_cmd (char *, struct ui_file *);
00227 
00228 extern void apropos_cmd (struct ui_file *, struct cmd_list_element *,
00229                          struct re_pattern_buffer *, char *);
00230 
00231 /* Used to mark commands that don't do anything.  If we just leave the
00232    function field NULL, the command is interpreted as a help topic, or
00233    as a class of commands.  */
00234 
00235 extern void not_just_help_class_command (char *arg, int from_tty);
00236 
00237 /* Exported to cli/cli-setshow.c */
00238 
00239 extern void print_doc_line (struct ui_file *, char *);
00240 
00241 extern const char * const auto_boolean_enums[];
00242 
00243 #endif /* !defined (CLI_DECODE_H) */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines