(root)/
gawk-5.2.2/
cmd.h
       1  /*
       2   * cmd.h - definitions for command parser
       3   */
       4  
       5  /*
       6   * Copyright (C) 2004, 2010, 2011, 2013, 2014, 2017, 2021,
       7   * the Free Software Foundation, Inc.
       8   *
       9   * This file is part of GAWK, the GNU implementation of the
      10   * AWK Programming Language.
      11   *
      12   * GAWK is free software; you can redistribute it and/or modify
      13   * it under the terms of the GNU General Public License as published by
      14   * the Free Software Foundation; either version 3 of the License, or
      15   * (at your option) any later version.
      16   *
      17   * GAWK is distributed in the hope that it will be useful,
      18   * but WITHOUT ANY WARRANTY; without even the implied warranty of
      19   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      20   * GNU General Public License for more details.
      21   *
      22   * You should have received a copy of the GNU General Public License
      23   * along with this program; if not, write to the Free Software
      24   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
      25   */
      26  
      27  #ifdef HAVE_LIBREADLINE
      28  #include <readline/readline.h>
      29  #include <readline/history.h>
      30  extern char **command_completion(const char *text, int start, int end);
      31  extern void initialize_pager(FILE *fp); /* debug.c */
      32  extern NODE *get_function(void);
      33  #else
      34  #define initialize_pager(x)		/* nothing */
      35  #define add_history(x)		/* nothing */
      36  #endif
      37  
      38  extern int gprintf(FILE *fp, const char *format, ...);
      39  extern jmp_buf pager_quit_tag;
      40  extern int pager_quit_tag_valid;
      41  
      42  extern bool output_is_tty;
      43  extern int input_fd;
      44  extern bool input_from_tty;
      45  extern FILE *out_fp;
      46  extern const char *dbg_prompt;
      47  extern const char *commands_prompt;
      48  extern const char *eval_prompt;
      49  extern const char *dgawk_prompt;
      50  
      51  enum argtype {
      52  	D_illegal,
      53  
      54  	/* commands */
      55  	D_backtrace,
      56  	D_break,
      57  	D_clear,
      58  	D_commands,
      59  	D_condition,
      60  	D_continue,
      61  	D_delete,
      62  	D_disable,
      63  	D_display,
      64  	D_down,
      65  	D_dump,
      66  	D_enable,
      67  	D_end,
      68  	D_eval,
      69  	D_finish,
      70  	D_frame,
      71  	D_help,
      72  	D_ignore,
      73  	D_info,
      74  	D_list,
      75  	D_next,
      76  	D_nexti,
      77  	D_option,
      78  	D_print,
      79  	D_printf,
      80  	D_quit,
      81  	D_return,
      82  	D_run,
      83  	D_save,
      84  	D_set,
      85  	D_silent,
      86  	D_source,
      87  	D_step,
      88  	D_stepi,
      89  	D_tbreak,
      90  	D_trace,
      91  	D_undisplay,
      92  	D_until,
      93  	D_unwatch,
      94  	D_up,
      95  	D_watch,
      96  
      97  	/* arguments */
      98  	D_argument,
      99  	D_int,
     100  	D_string,
     101  	D_variable,
     102  	D_node,
     103  	D_field,
     104  	D_array,
     105  	D_subscript,
     106  	D_func,
     107  	D_range
     108  };
     109  
     110  /* non-number arguments to commands */
     111  
     112  enum nametypeval {
     113  	A_NONE = 0,
     114  	A_ARGS,
     115  	A_BREAK,
     116  	A_DEL,
     117  	A_DISPLAY,
     118  	A_FRAME,
     119  	A_FUNCTIONS,
     120  	A_LOCALS,
     121  	A_ONCE,
     122  	A_SOURCE,
     123  	A_SOURCES,
     124  	A_TRACE_ON,
     125  	A_TRACE_OFF,
     126  	A_VARIABLES,
     127  	A_WATCH
     128  };
     129  
     130  typedef struct cmd_argument {
     131  	struct cmd_argument *next;
     132  	enum argtype type;
     133  	union {
     134  		long lval;
     135  		char *sval;
     136  		NODE *nodeval;
     137  	} value;
     138  
     139  #define a_int       value.lval	/* type = D_int or D_range */
     140  #define a_argument  value.lval	/* type = D_argument */
     141  #define a_string  value.sval	/* type = D_string, D_array, D_subscript or D_variable */
     142  #define a_node    value.nodeval /* type = D_node, D_field or D_func */
     143  
     144  	int a_count;		/* subscript count for D_subscript and D_array */
     145  } CMDARG;
     146  
     147  typedef int (*Func_cmd)(CMDARG *, int);
     148  
     149  struct cmdtoken {
     150  	const char *name;
     151  	const char *abbrvn;	/* abbreviation */
     152  	enum argtype type;
     153  	int lex_class;
     154  	Func_cmd cf_ptr;
     155  	const char *help_txt;
     156  };
     157  
     158  /* command.c */
     159  extern void free_cmdarg(CMDARG *list);
     160  extern Func_cmd get_command(int ctype);
     161  extern const char *get_command_name(int ctype);
     162  
     163  /* debug.c */
     164  extern void d_error(const char *mesg, ...);
     165  
     166  /* command.c */
     167  extern int find_option(char *name);
     168  extern void option_help(void);
     169  extern char *(*read_a_line)(const char *prompt);
     170  extern char *read_commands_string(const char *prompt);
     171  extern int in_cmd_src(const char *);
     172  extern int get_eof_status(void);
     173  extern void push_cmd_src(int fd, bool istty, char * (*readfunc)(const char *),
     174  		int (*closefunc)(int), int cmd, int eofstatus);
     175  extern int pop_cmd_src(void);
     176  extern int has_break_or_watch_point(int *pnum, bool any);
     177  extern int do_list(CMDARG *arg, int cmd);
     178  extern int do_info(CMDARG *arg, int cmd);
     179  extern int do_print_var(CMDARG *arg, int cmd);
     180  extern int do_backtrace(CMDARG *arg, int cmd);
     181  extern int do_breakpoint(CMDARG *arg, int cmd);
     182  extern int do_tmp_breakpoint(CMDARG *arg, int cmd);
     183  extern int do_delete_breakpoint(CMDARG *arg, int cmd);
     184  extern int do_enable_breakpoint(CMDARG *arg, int cmd);
     185  extern int do_disable_breakpoint(CMDARG *arg, int cmd) ;
     186  extern int do_ignore_breakpoint(CMDARG *arg, int cmd) ;
     187  extern int do_run(CMDARG *arg, int cmd);
     188  extern int do_quit(CMDARG *arg, int cmd);
     189  extern int do_continue(CMDARG *arg, int cmd);
     190  extern int do_step(CMDARG *arg, int cmd) ;
     191  extern int do_stepi(CMDARG *arg, int cmd) ;
     192  extern int do_next(CMDARG *arg, int cmd);
     193  extern int do_nexti(CMDARG *arg, int cmd);
     194  extern int do_clear(CMDARG *arg, int cmd);
     195  extern int do_finish(CMDARG *arg, int cmd) ;
     196  extern int do_help(CMDARG *arg, int cmd) ;
     197  extern int do_up(CMDARG *arg, int cmd);
     198  extern int do_down(CMDARG *arg, int cmd);
     199  extern int do_frame(CMDARG *arg, int cmd);
     200  extern int do_until(CMDARG *arg, int cmd);
     201  extern int do_set_var(CMDARG *arg, int cmd);
     202  extern int do_return(CMDARG *arg, int cmd);
     203  extern int do_display(CMDARG *arg, int cmd);
     204  extern int do_undisplay(CMDARG *arg, int cmd);
     205  extern int do_watch(CMDARG *arg, int cmd);
     206  extern int do_unwatch(CMDARG *arg, int cmd);
     207  extern int do_dump_instructions(CMDARG *arg, int cmd);
     208  extern int do_trace_instruction(CMDARG *arg, int cmd);
     209  extern int do_option(CMDARG *arg, int cmd);
     210  extern int do_commands(CMDARG *arg, int cmd);
     211  extern int do_print_f(CMDARG *arg, int cmd);
     212  extern int do_source(CMDARG *arg, int cmd);
     213  extern int do_save(CMDARG *arg, int cmd);
     214  extern int do_eval(CMDARG *arg, int cmd);
     215  extern int do_condition(CMDARG *arg, int cmd);