2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
[deliverable/binutils-gdb.git] / gdb / command.h
index ec75b679b6afd339fb913dfe2cc155355a8db8e4..899d0d6249b50bc45ba98e54143b7e29328feb57 100644 (file)
@@ -1,12 +1,7 @@
-/* ***DEPRECATED***  The gdblib files must not be calling/using things in any
-   of the possible command languages.  If necessary, a hook (that may be
-   present or not) must be used and set to the appropriate routine by any
-   command language that cares about it.  If you are having to include this
-   file you are possibly doing things the old way.  This file will disapear.
-   2000-12-01 fnasser@redhat.com    */
-
 /* Header file for command-reading library command.c.
-   Copyright (C) 1986, 1989, 1990, 2000 Free Software Foundation, Inc.
+
+   Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1999,
+   2000, 2002, 2004 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
@@ -43,6 +38,8 @@ enum command_class
   class_pseudo, class_tui, class_xdb
 };
 
+/* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
+   cmd_types'' can be moved from "command.h" to "cli-decode.h".  */
 /* Not a set/show command.  Note that some commands which begin with
    "set" or "show" might be in this category, if their syntax does
    not fall into one of the following categories.  */
@@ -54,14 +51,6 @@ typedef enum cmd_types
   }
 cmd_types;
 
-/* Reasonable values for an AUTO_BOOLEAN variable. */
-enum cmd_auto_boolean
-{
-  CMD_AUTO_BOOLEAN_TRUE,
-  CMD_AUTO_BOOLEAN_FALSE,
-  CMD_AUTO_BOOLEAN_AUTO
-};
-
 /* Types of "set" or "show" command.  */
 typedef enum var_types
   {
@@ -70,9 +59,9 @@ typedef enum var_types
     var_boolean,
 
     /* "on" / "true" / "enable" or "off" / "false" / "disable" or
-       "auto.  *VAR is an ``enum cmd_auto_boolean''.  NOTE: In general
-       a custom show command will need to be implemented - one that
-       for "auto" prints both the "auto" and the current auto-selected
+       "auto.  *VAR is an ``enum auto_boolean''.  NOTE: In general a
+       custom show command will need to be implemented - one that for
+       "auto" prints both the "auto" and the current auto-selected
        value. */
     var_auto_boolean,
 
@@ -104,150 +93,9 @@ typedef enum var_types
 var_types;
 
 /* This structure records one command'd definition.  */
+struct cmd_list_element;
 
-
-/* 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
-
-struct cmd_list_element
-  {
-    /* Points to next command in this list.  */
-    struct cmd_list_element *next;
-
-    /* Name of this command.  */
-    char *name;
-
-    /* Command class; class values are chosen by application program.  */
-    enum command_class class;
-
-    /* Function definition of this command.
-       NO_FUNCTION for command class names and for help topics that
-       are not really commands.  */
-    union
-      {
-       /* If type is not_set_cmd, call it like this:  */
-       void (*cfunc) (char *args, int from_tty);
-
-       /* If type is cmd_set or show_cmd, first set the variables, and
-          then call this.  */
-       void (*sfunc) (char *args, int from_tty, struct cmd_list_element * c);
-      }
-    function;
-#define NO_FUNCTION ((void (*) (char *args, int from_tty)) 0)
-
-    /* Documentation of this command (or help topic).
-       First line is brief documentation; remaining lines form, with it,
-       the full documentation.  First line should end with a period.
-       Entire string should also end with a period, not a newline.  */
-    char *doc;
-
-    /* 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
-       future.
-
-       bit 1: DEPRECATED_WARN_USER, the user needs to be warned that
-       this is a deprecated command.  The user should only be warned
-       the first time a command is used.
-        
-       bit 2: MALLOCED_REPLACEMENT, when functions are deprecated at
-       compile time (this is the way it should, in general, be done)
-       the memory containing the replacement string is statically
-       allocated.  In some cases it makes sense to deprecate commands
-       at runtime (the testsuite is one example).  In this case the
-       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.  
-     */
-    int flags;
-
-    /* if this command is deprecated, this is the replacement name */
-    char *replacement;
-
-    /* Hook for another command to be executed before this command.  */
-    struct cmd_list_element *hook_pre;
-
-    /* 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. */
-    /* Prevents the possibility of hook recursion. */
-    int hook_in;
-
-    /* Nonzero identifies a prefix command.  For them, the address
-       of the variable containing the list of subcommands.  */
-    struct cmd_list_element **prefixlist;
-
-    /* For prefix commands only:
-       String containing prefix commands to get here: this one
-       plus any others needed to get to it.  Should end in a space.
-       It is used before the word "command" in describing the
-       commands reached through this prefix.  */
-    char *prefixname;
-
-    /* For prefix commands only:
-       nonzero means do not get an error if subcommand is not
-       recognized; call the prefix's own function in that case.  */
-    char allow_unknown;
-
-    /* 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
-       otherwise wouldn't.  */
-    char abbrev_flag;
-
-    /* Completion routine for this command.  TEXT is the text beyond
-       what was matched for the command itself (leading whitespace is
-       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);
-
-    /* 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.  */
-    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 command strings of user-defined commands */
-    struct command_line *user_commands;
-
-    /* Pointer to command that is hooked by this one, (by hook_pre)
-       so the hook can be removed when this one is deleted.  */
-    struct cmd_list_element *hookee_pre;
-
-    /* Pointer to command that is hooked by this one, (by hook_post)
-       so the hook can be removed when this one is deleted.  */
-    struct cmd_list_element *hookee_post;
-
-    /* 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;
-  };
-
-/* Forward-declarations of the entry-points of command.c.  */
+/* Forward-declarations of the entry-points of cli/cli-decode.c.  */
 
 extern struct cmd_list_element *add_cmd (char *, enum command_class,
                                         void (*fun) (char *, int), char *,
@@ -274,6 +122,49 @@ extern struct cmd_list_element *add_abbrev_prefix_cmd (char *,
                                                       struct cmd_list_element
                                                       **);
 
+/* Set the commands corresponding callback.  */
+
+typedef void cmd_cfunc_ftype (char *args, int from_tty);
+extern void set_cmd_cfunc (struct cmd_list_element *cmd,
+                          cmd_cfunc_ftype *cfunc);
+
+typedef void cmd_sfunc_ftype (char *args, int from_tty,
+                             struct cmd_list_element *c);
+extern void set_cmd_sfunc (struct cmd_list_element *cmd,
+                          cmd_sfunc_ftype *sfunc);
+
+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));
+
+/* Each command object has a local context attached to it. .  */
+extern void set_cmd_context (struct cmd_list_element *cmd, void *context);
+extern void *get_cmd_context (struct cmd_list_element *cmd);
+
+
+/* Execute CMD's pre/post hook.  Throw an error if the command fails.
+   If already executing this pre/post hook, or there is no pre/post
+   hook, the call is silently ignored.  */
+extern void execute_cmd_pre_hook (struct cmd_list_element *cmd);
+extern void execute_cmd_post_hook (struct cmd_list_element *cmd);
+
+/* Return the type of the command.  */
+/* NOTE: cagney/2002-03-17: The deprecated_add_show_from_set()
+   function clones the set command passed as a parameter.  The clone
+   operation will include (BUG?) any ``set'' command callback, if
+   present.  Commands like ``info set'' call all the ``show'' command
+   callbacks.  Unfortunately, for ``show'' commands cloned from
+   ``set'', this includes callbacks belonging to ``set'' commands.
+   Making this worse, this only occures if
+   deprecated_add_show_from_set() is called after add_cmd_sfunc()
+   (BUG?).  */
+extern enum cmd_types cmd_type (struct cmd_list_element *cmd);
+
+
 extern struct cmd_list_element *lookup_cmd (char **,
                                            struct cmd_list_element *, char *,
                                            int, int);
@@ -332,23 +223,93 @@ extern struct cmd_list_element *add_set_enum_cmd (char *name,
                                                  const char **var,
                                                  char *doc,
                                                  struct cmd_list_element **list);
-
-extern struct cmd_list_element *add_set_auto_boolean_cmd (char *name,
-                                                         enum command_class class,
-                                                         enum cmd_auto_boolean *var,
-                                                         char *doc,
-                                                         struct cmd_list_element **list);
-
-extern struct cmd_list_element *add_show_from_set (struct cmd_list_element *,
-                                                  struct cmd_list_element
-                                                  **);
-
-/* Do a "set" or "show" command.  ARG is NULL if no argument, or the text
-   of the argument, and FROM_TTY is nonzero if this command is being entered
-   directly by the user (i.e. these are just like any other
-   command).  C is the command list element for the command.  */
-
-extern void do_setshow_command (char *, int, struct cmd_list_element *);
+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,
+                                 struct cmd_list_element **set_result,
+                                 struct cmd_list_element **show_result);
+
+extern void add_setshow_auto_boolean_cmd (char *name,
+                                         enum command_class class,
+                                         enum auto_boolean *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_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,
+                                    struct cmd_list_element **show_list);
+
+extern 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);
+
+extern 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);
+
+extern void 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);
+
+extern 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);
+
+extern struct cmd_list_element *deprecated_add_show_from_set (struct cmd_list_element *,
+                                                             struct cmd_list_element **);
 
 /* Do a "show" command for each thing on a command list.  */
 
@@ -364,4 +325,10 @@ extern void dont_repeat (void);
 
 extern void not_just_help_class_command (char *, int);
 
+/* check function pointer */
+extern int cmd_func_p (struct cmd_list_element *cmd);
+
+/* call the command function */
+extern void cmd_func (struct cmd_list_element *cmd, char *args, int from_tty);
+
 #endif /* !defined (COMMAND_H) */
This page took 0.02721 seconds and 4 git commands to generate.