Home | History | Annotate | Line # | Download | only in gdb
command.h revision 1.7
      1 /* Header file for command creation.
      2 
      3    Copyright (C) 1986-2017 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 "gdb_vecs.h"
     22 
     23 /* This file defines the public interface for any code wanting to
     24    create commands.  */
     25 
     26 /* Command classes are top-level categories into which commands are
     27    broken down for "help" purposes.
     28 
     29    Notes on classes: class_alias is for alias commands which are not
     30    abbreviations of the original command.  class-pseudo is for
     31    commands which are not really commands nor help topics ("stop").  */
     32 
     33 enum command_class
     34 {
     35   /* Special args to help_list */
     36   class_deprecated = -3, all_classes = -2, all_commands = -1,
     37   /* Classes of commands */
     38   no_class = -1, class_run = 0, class_vars, class_stack, class_files,
     39   class_support, class_info, class_breakpoint, class_trace,
     40   class_alias, class_bookmark, class_obscure, class_maintenance,
     41   class_pseudo, class_tui, class_user, class_xdb,
     42   no_set_class	/* Used for "show" commands that have no corresponding
     43 		   "set" command.  */
     44 };
     45 
     46 /* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
     47    cmd_types'' can be moved from "command.h" to "cli-decode.h".  */
     48 /* Not a set/show command.  Note that some commands which begin with
     49    "set" or "show" might be in this category, if their syntax does
     50    not fall into one of the following categories.  */
     51 typedef enum cmd_types
     52   {
     53     not_set_cmd,
     54     set_cmd,
     55     show_cmd
     56   }
     57 cmd_types;
     58 
     59 /* Types of "set" or "show" command.  */
     60 typedef enum var_types
     61   {
     62     /* "on" or "off".  *VAR is an integer which is nonzero for on,
     63        zero for off.  */
     64     var_boolean,
     65 
     66     /* "on" / "true" / "enable" or "off" / "false" / "disable" or
     67        "auto.  *VAR is an ``enum auto_boolean''.  NOTE: In general a
     68        custom show command will need to be implemented - one that for
     69        "auto" prints both the "auto" and the current auto-selected
     70        value.  */
     71     var_auto_boolean,
     72 
     73     /* Unsigned Integer.  *VAR is an unsigned int.  The user can type
     74        0 to mean "unlimited", which is stored in *VAR as UINT_MAX.  */
     75     var_uinteger,
     76 
     77     /* Like var_uinteger but signed.  *VAR is an int.  The user can
     78        type 0 to mean "unlimited", which is stored in *VAR as
     79        INT_MAX.  The only remaining use of it is the Python API.
     80        Don't use it elsewhere.  */
     81     var_integer,
     82 
     83     /* String which the user enters with escapes (e.g. the user types
     84        \n and it is a real newline in the stored string).
     85        *VAR is a malloc'd string, or NULL if the string is empty.  */
     86     var_string,
     87     /* String which stores what the user types verbatim.
     88        *VAR is a malloc'd string, or NULL if the string is empty.  */
     89     var_string_noescape,
     90     /* String which stores a filename.  (*VAR) is a malloc'd string,
     91        or "" if the string was empty.  */
     92     var_optional_filename,
     93     /* String which stores a filename.  (*VAR) is a malloc'd
     94        string.  */
     95     var_filename,
     96     /* ZeroableInteger.  *VAR is an int.  Like var_integer except
     97        that zero really means zero.  */
     98     var_zinteger,
     99     /* ZeroableUnsignedInteger.  *VAR is an unsigned int.  Zero really
    100        means zero.  */
    101     var_zuinteger,
    102     /* ZeroableUnsignedInteger with unlimited value.  *VAR is an int,
    103        but its range is [0, INT_MAX].  -1 stands for unlimited and
    104        other negative numbers are not allowed.  */
    105     var_zuinteger_unlimited,
    106     /* Enumerated type.  Can only have one of the specified values.
    107        *VAR is a char pointer to the name of the element that we
    108        find.  */
    109     var_enum
    110   }
    111 var_types;
    112 
    113 /* This structure records one command'd definition.  */
    114 struct cmd_list_element;
    115 
    116 typedef void cmd_cfunc_ftype (char *args, int from_tty);
    117 
    118 /* This structure specifies notifications to be suppressed by a cli
    119    command interpreter.  */
    120 
    121 struct cli_suppress_notification
    122 {
    123   /* Inferior, thread, frame selected notification suppressed?  */
    124   int user_selected_context;
    125 };
    126 
    127 extern struct cli_suppress_notification cli_suppress_notification;
    128 
    129 /* Forward-declarations of the entry-points of cli/cli-decode.c.  */
    130 
    131 /* API to the manipulation of command lists.  */
    132 
    133 extern int valid_user_defined_cmd_name_p (const char *name);
    134 
    135 extern struct cmd_list_element *add_cmd (const char *, enum command_class,
    136 					 cmd_cfunc_ftype *fun,
    137 					 const char *,
    138 					 struct cmd_list_element **);
    139 
    140 extern struct cmd_list_element *add_alias_cmd (const char *, const char *,
    141 					       enum command_class, int,
    142 					       struct cmd_list_element **);
    143 
    144 extern struct cmd_list_element *add_alias_cmd (const char *,
    145 					       cmd_list_element *,
    146 					       enum command_class, int,
    147 					       struct cmd_list_element **);
    148 
    149 
    150 extern struct cmd_list_element *add_prefix_cmd (const char *, enum command_class,
    151 						cmd_cfunc_ftype *fun,
    152 						const char *,
    153 						struct cmd_list_element **,
    154 						const char *, int,
    155 						struct cmd_list_element **);
    156 
    157 extern struct cmd_list_element *add_abbrev_prefix_cmd (const char *,
    158 						       enum command_class,
    159 						       cmd_cfunc_ftype *fun,
    160 						       const char *,
    161 						       struct cmd_list_element
    162 						       **, const char *, int,
    163 						       struct cmd_list_element
    164 						       **);
    165 
    166 /* Set the commands corresponding callback.  */
    167 
    168 extern void set_cmd_cfunc (struct cmd_list_element *cmd,
    169 			   cmd_cfunc_ftype *cfunc);
    170 
    171 typedef void cmd_sfunc_ftype (char *args, int from_tty,
    172 			      struct cmd_list_element *c);
    173 extern void set_cmd_sfunc (struct cmd_list_element *cmd,
    174 			   cmd_sfunc_ftype *sfunc);
    175 
    176 typedef VEC (char_ptr) *completer_ftype (struct cmd_list_element *,
    177 					 const char *, const char *);
    178 
    179 typedef void completer_ftype_void (struct cmd_list_element *,
    180 				   const char *, const char *);
    181 
    182 extern void set_cmd_completer (struct cmd_list_element *, completer_ftype *);
    183 
    184 /* Set the completer_handle_brkchars callback.  */
    185 
    186 extern void set_cmd_completer_handle_brkchars (struct cmd_list_element *,
    187 					       completer_ftype_void *);
    188 
    189 /* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs
    190    around in cmd objects to test the value of the commands sfunc().  */
    191 extern int cmd_cfunc_eq (struct cmd_list_element *cmd,
    192 			 cmd_cfunc_ftype *cfun);
    193 
    194 /* Each command object has a local context attached to it.  */
    195 extern void set_cmd_context (struct cmd_list_element *cmd,
    196 			     void *context);
    197 extern void *get_cmd_context (struct cmd_list_element *cmd);
    198 
    199 
    200 /* Execute CMD's pre/post hook.  Throw an error if the command fails.
    201    If already executing this pre/post hook, or there is no pre/post
    202    hook, the call is silently ignored.  */
    203 extern void execute_cmd_pre_hook (struct cmd_list_element *cmd);
    204 extern void execute_cmd_post_hook (struct cmd_list_element *cmd);
    205 
    206 /* Return the type of the command.  */
    207 extern enum cmd_types cmd_type (struct cmd_list_element *cmd);
    208 
    209 /* Flag for an ambiguous cmd_list result.  */
    210 #define CMD_LIST_AMBIGUOUS ((struct cmd_list_element *) -1)
    211 
    212 extern struct cmd_list_element *lookup_cmd (const char **,
    213 					    struct cmd_list_element *,
    214 					    const char *,
    215 					    int, int);
    216 
    217 extern struct cmd_list_element *lookup_cmd_1 (const char **,
    218 					      struct cmd_list_element *,
    219 					      struct cmd_list_element **,
    220 					      int);
    221 
    222 extern struct cmd_list_element *deprecate_cmd (struct cmd_list_element *,
    223 					       const char * );
    224 
    225 extern void deprecated_cmd_warning (const char *);
    226 
    227 extern int lookup_cmd_composition (const char *text,
    228 				   struct cmd_list_element **alias,
    229 				   struct cmd_list_element **prefix_cmd,
    230 				   struct cmd_list_element **cmd);
    231 
    232 extern struct cmd_list_element *add_com (const char *, enum command_class,
    233 					 cmd_cfunc_ftype *fun,
    234 					 const char *);
    235 
    236 extern struct cmd_list_element *add_com_alias (const char *, const char *,
    237 					       enum command_class, int);
    238 
    239 extern struct cmd_list_element *add_com_suppress_notification
    240 		       (const char *name, enum command_class theclass,
    241 			cmd_cfunc_ftype *fun, const char *doc,
    242 			int *supress_notification);
    243 
    244 extern struct cmd_list_element *add_info (const char *,
    245 					  cmd_cfunc_ftype *fun,
    246 					  const char *);
    247 
    248 extern struct cmd_list_element *add_info_alias (const char *, const char *,
    249 						int);
    250 
    251 extern VEC (char_ptr) *complete_on_cmdlist (struct cmd_list_element *,
    252 					    const char *, const char *, int);
    253 
    254 extern VEC (char_ptr) *complete_on_enum (const char *const *enumlist,
    255 					 const char *, const char *);
    256 
    257 /* Functions that implement commands about CLI commands.  */
    258 
    259 extern void help_list (struct cmd_list_element *, const char *,
    260 		       enum command_class, struct ui_file *);
    261 
    262 /* Method for show a set/show variable's VALUE on FILE.  If this
    263    method isn't supplied deprecated_show_value_hack() is called (which
    264    is not good).  */
    265 typedef void (show_value_ftype) (struct ui_file *file,
    266 				 int from_tty,
    267 				 struct cmd_list_element *cmd,
    268 				 const char *value);
    269 /* NOTE: i18n: This function is not i18n friendly.  Callers should
    270    instead print the value out directly.  */
    271 extern show_value_ftype deprecated_show_value_hack;
    272 
    273 extern void add_setshow_enum_cmd (const char *name,
    274 				  enum command_class theclass,
    275 				  const char *const *enumlist,
    276 				  const char **var,
    277 				  const char *set_doc,
    278 				  const char *show_doc,
    279 				  const char *help_doc,
    280 				  cmd_sfunc_ftype *set_func,
    281 				  show_value_ftype *show_func,
    282 				  struct cmd_list_element **set_list,
    283 				  struct cmd_list_element **show_list);
    284 
    285 extern void add_setshow_auto_boolean_cmd (const char *name,
    286 					  enum command_class theclass,
    287 					  enum auto_boolean *var,
    288 					  const char *set_doc,
    289 					  const char *show_doc,
    290 					  const char *help_doc,
    291 					  cmd_sfunc_ftype *set_func,
    292 					  show_value_ftype *show_func,
    293 					  struct cmd_list_element **set_list,
    294 					  struct cmd_list_element **show_list);
    295 
    296 extern void add_setshow_boolean_cmd (const char *name,
    297 				     enum command_class theclass,
    298 				     int *var,
    299 				     const char *set_doc, const char *show_doc,
    300 				     const char *help_doc,
    301 				     cmd_sfunc_ftype *set_func,
    302 				     show_value_ftype *show_func,
    303 				     struct cmd_list_element **set_list,
    304 				     struct cmd_list_element **show_list);
    305 
    306 extern void add_setshow_filename_cmd (const char *name,
    307 				      enum command_class theclass,
    308 				      char **var,
    309 				      const char *set_doc,
    310 				      const char *show_doc,
    311 				      const char *help_doc,
    312 				      cmd_sfunc_ftype *set_func,
    313 				      show_value_ftype *show_func,
    314 				      struct cmd_list_element **set_list,
    315 				      struct cmd_list_element **show_list);
    316 
    317 extern void add_setshow_string_cmd (const char *name,
    318 				    enum command_class theclass,
    319 				    char **var,
    320 				    const char *set_doc,
    321 				    const char *show_doc,
    322 				    const char *help_doc,
    323 				    cmd_sfunc_ftype *set_func,
    324 				    show_value_ftype *show_func,
    325 				    struct cmd_list_element **set_list,
    326 				    struct cmd_list_element **show_list);
    327 
    328 extern struct cmd_list_element *add_setshow_string_noescape_cmd
    329 		      (const char *name,
    330 		       enum command_class theclass,
    331 		       char **var,
    332 		       const char *set_doc,
    333 		       const char *show_doc,
    334 		       const char *help_doc,
    335 		       cmd_sfunc_ftype *set_func,
    336 		       show_value_ftype *show_func,
    337 		       struct cmd_list_element **set_list,
    338 		       struct cmd_list_element **show_list);
    339 
    340 extern void add_setshow_optional_filename_cmd (const char *name,
    341 					       enum command_class theclass,
    342 					       char **var,
    343 					       const char *set_doc,
    344 					       const char *show_doc,
    345 					       const char *help_doc,
    346 					       cmd_sfunc_ftype *set_func,
    347 					       show_value_ftype *show_func,
    348 					       struct cmd_list_element **set_list,
    349 					       struct cmd_list_element **show_list);
    350 
    351 extern void add_setshow_integer_cmd (const char *name,
    352 				     enum command_class theclass,
    353 				     int *var,
    354 				     const char *set_doc,
    355 				     const char *show_doc,
    356 				     const char *help_doc,
    357 				     cmd_sfunc_ftype *set_func,
    358 				     show_value_ftype *show_func,
    359 				     struct cmd_list_element **set_list,
    360 				     struct cmd_list_element **show_list);
    361 
    362 extern void add_setshow_uinteger_cmd (const char *name,
    363 				      enum command_class theclass,
    364 				      unsigned int *var,
    365 				      const char *set_doc,
    366 				      const char *show_doc,
    367 				      const char *help_doc,
    368 				      cmd_sfunc_ftype *set_func,
    369 				      show_value_ftype *show_func,
    370 				      struct cmd_list_element **set_list,
    371 				      struct cmd_list_element **show_list);
    372 
    373 extern void add_setshow_zinteger_cmd (const char *name,
    374 				      enum command_class theclass,
    375 				      int *var,
    376 				      const char *set_doc,
    377 				      const char *show_doc,
    378 				      const char *help_doc,
    379 				      cmd_sfunc_ftype *set_func,
    380 				      show_value_ftype *show_func,
    381 				      struct cmd_list_element **set_list,
    382 				      struct cmd_list_element **show_list);
    383 
    384 extern void add_setshow_zuinteger_cmd (const char *name,
    385 				       enum command_class theclass,
    386 				       unsigned int *var,
    387 				       const char *set_doc,
    388 				       const char *show_doc,
    389 				       const char *help_doc,
    390 				       cmd_sfunc_ftype *set_func,
    391 				       show_value_ftype *show_func,
    392 				       struct cmd_list_element **set_list,
    393 				       struct cmd_list_element **show_list);
    394 
    395 extern void
    396   add_setshow_zuinteger_unlimited_cmd (const char *name,
    397 				       enum command_class theclass,
    398 				       int *var,
    399 				       const char *set_doc,
    400 				       const char *show_doc,
    401 				       const char *help_doc,
    402 				       cmd_sfunc_ftype *set_func,
    403 				       show_value_ftype *show_func,
    404 				       struct cmd_list_element **set_list,
    405 				       struct cmd_list_element **show_list);
    406 
    407 /* Do a "show" command for each thing on a command list.  */
    408 
    409 extern void cmd_show_list (struct cmd_list_element *, int, const char *);
    410 
    411 /* Used everywhere whenever at least one parameter is required and
    412    none is specified.  */
    413 
    414 extern void error_no_arg (const char *) ATTRIBUTE_NORETURN;
    415 
    416 extern void dont_repeat (void);
    417 
    418 extern scoped_restore_tmpl<int> prevent_dont_repeat (void);
    419 
    420 /* Used to mark commands that don't do anything.  If we just leave the
    421    function field NULL, the command is interpreted as a help topic, or
    422    as a class of commands.  */
    423 
    424 extern void not_just_help_class_command (char *, int);
    425 
    426 /* Check function pointer.  */
    427 extern int cmd_func_p (struct cmd_list_element *cmd);
    428 
    429 /* Call the command function.  */
    430 extern void cmd_func (struct cmd_list_element *cmd,
    431 		      char *args, int from_tty);
    432 
    433 #endif /* !defined (COMMAND_H) */
    434