typedef struct Addr Addr;
typedef struct Cmd Cmd;
struct Addr
{
	char	type;	/* # (char addr), l (line addr), / ? . $ + - , ; */
	union{
		String	*re;
		Addr	*aleft;		/* left side of , and ; */
	} g;
	Posn	num;
	Addr	*next;			/* or right side of , and ; */
};

#define	are	g.re
#define	left	g.aleft

struct Cmd
{
	Addr	*addr;			/* address (range of text) */
	String	*re;			/* regular expression for e.g. 'x' */
	union{
		Cmd	*cmd;		/* target of x, g, {, etc. */
		String	*text;		/* text of a, c, i; rhs of s */
		Addr	*addr;		/* address for m, t */
	} g;
	Cmd	*next;			/* pointer to next element in {} */
	short	num;
	ushort	flag;			/* whatever */
	ushort	cmdc;			/* command character; 'x' etc. */
};

#define	ccmd	g.cmd
#define	ctext	g.text
#define	caddr	g.addr

extern struct cmdtab{
	ushort	cmdc;		/* command character */
	uchar	text;		/* takes a textual argument? */
	uchar	regexp;		/* takes a regular expression? */
	uchar	addr;		/* takes an address (m or t)? */
	uchar	defcmd;		/* default command; 0==>none */
	uchar	defaddr;	/* default address */
	uchar	count;		/* takes a count e.g. s2/// */
	char	*token;		/* takes text terminated by one of these */
	int	(*fn)(File*, Cmd*);	/* function to call with parse tree */
}cmdtab[];

enum Defaddr{	/* default addresses */
	aNo,
	aDot,
	aAll
};

int	nl_cmd(File*, Cmd*), a_cmd(File*, Cmd*), b_cmd(File*, Cmd*);
int	c_cmd(File*, Cmd*), cd_cmd(File*, Cmd*), d_cmd(File*, Cmd*);
int	D_cmd(File*, Cmd*), e_cmd(File*, Cmd*);
int	f_cmd(File*, Cmd*), g_cmd(File*, Cmd*), i_cmd(File*, Cmd*);
int	k_cmd(File*, Cmd*), m_cmd(File*, Cmd*), n_cmd(File*, Cmd*);
int	p_cmd(File*, Cmd*), q_cmd(File*, Cmd*);
int	s_cmd(File*, Cmd*), u_cmd(File*, Cmd*), w_cmd(File*, Cmd*);
int	x_cmd(File*, Cmd*), X_cmd(File*, Cmd*), plan9_cmd(File*, Cmd*);
int	eq_cmd(File*, Cmd*);


String	*getregexp(int);
Addr	*newaddr(void);
Address	address(Addr*, Address, int);
int	cmdexec(File*, Cmd*);
