#ifndef DO_DECLARE_EXCMD
typedef struct exarg exarg_T;
#endif
struct exarg
{
char_u *arg; // argument of the command
char_u *nextcmd; // next command (NULL if none)
char_u *cmd; // the name of the command (except for :make)
char_u **cmdlinep; // pointer to pointer of allocated cmdline
cmdidx_T cmdidx; // the index for the command
long argt; // flags for the command
int skip; // don't execute the command, only parse it
int forceit; // TRUE if ! present
int addr_count; // the number of addresses given
linenr_T line1; // the first line number
linenr_T line2; // the second line number or count
cmd_addr_T addr_type; // type of the count/range
int flags; // extra flags after count: EXFLAG_
char_u *do_ecmd_cmd; // +command arg to be used in edited file
linenr_T do_ecmd_lnum; // the line number in an edited file
int append; // TRUE with ":w >>file" command
int usefilter; // TRUE with ":w !command" and ":r!command"
int amount; // number of '>' or '<' for shift command
int regname; // register name (NUL if none)
int force_bin; // 0, FORCE_BIN or FORCE_NOBIN
int read_edit; // ++edit argument
int force_ff; // ++ff= argument (first char of argument)
int force_enc; // ++enc= argument (index in cmd[])
int bad_char; // BAD_KEEP, BAD_DROP or replacement byte
int useridx; // user command index
char *errmsg; // returned error message
char_u *(*getline)(int, void *, int, int);
void *cookie; // argument for getline()
#ifdef FEAT_EVAL
struct condstack *cstack; // condition stack for ":if" etc.
#endif
long verbose_save; // saved value of p_verbose
int save_msg_silent; // saved value of msg_silent
int did_esilent; // how many times emsg_silent was incremented
#ifdef HAVE_SANDBOX
int did_sandbox; // when TRUE did ++sandbox
#endif
};