plan9port

[fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port # fast
git clone https://src.adamsgaard.dk/plan9port.git # slow
Log | Files | Refs | README | LICENSE Back to index

edit.h (2437B)


      1 /*#pragma	varargck	argpos	editerror	1*/
      2 
      3 typedef struct Addr	Addr;
      4 typedef struct Address	Address;
      5 typedef struct Cmd	Cmd;
      6 typedef struct List	List;
      7 typedef struct String	String;
      8 
      9 struct String
     10 {
     11 	int	n;		/* excludes NUL */
     12 	Rune	*r;		/* includes NUL */
     13 	int	nalloc;
     14 };
     15 
     16 struct Addr
     17 {
     18 	char	type;	/* # (char addr), l (line addr), / ? . $ + - , ; */
     19 	union{
     20 		String	*re;
     21 		Addr	*left;		/* left side of , and ; */
     22 	} u;
     23 	ulong	num;
     24 	Addr	*next;			/* or right side of , and ; */
     25 };
     26 
     27 struct Address
     28 {
     29 	Range	r;
     30 	File	*f;
     31 };
     32 
     33 struct Cmd
     34 {
     35 	Addr	*addr;			/* address (range of text) */
     36 	String	*re;			/* regular expression for e.g. 'x' */
     37 	union{
     38 		Cmd	*cmd;		/* target of x, g, {, etc. */
     39 		String	*text;		/* text of a, c, i; rhs of s */
     40 		Addr	*mtaddr;		/* address for m, t */
     41 	} u;
     42 	Cmd	*next;			/* pointer to next element in {} */
     43 	short	num;
     44 	ushort	flag;			/* whatever */
     45 	ushort	cmdc;			/* command character; 'x' etc. */
     46 };
     47 
     48 extern struct cmdtab{
     49 	ushort	cmdc;		/* command character */
     50 	uchar	text;		/* takes a textual argument? */
     51 	uchar	regexp;		/* takes a regular expression? */
     52 	uchar	addr;		/* takes an address (m or t)? */
     53 	uchar	defcmd;		/* default command; 0==>none */
     54 	uchar	defaddr;	/* default address */
     55 	uchar	count;		/* takes a count e.g. s2/// */
     56 	char	*token;		/* takes text terminated by one of these */
     57 	int	(*fn)(Text*, Cmd*);	/* function to call with parse tree */
     58 }cmdtab[];
     59 
     60 #define	INCR	25	/* delta when growing list */
     61 
     62 struct List	/* code depends on a long being able to hold a pointer */
     63 {
     64 	int	nalloc;
     65 	int	nused;
     66 	union{
     67 		void	*listptr;
     68 		void*	*ptr;
     69 		uchar*	*ucharptr;
     70 		String*	*stringptr;
     71 	} u;
     72 };
     73 
     74 enum Defaddr{	/* default addresses */
     75 	aNo,
     76 	aDot,
     77 	aAll
     78 };
     79 
     80 int	nl_cmd(Text*, Cmd*), a_cmd(Text*, Cmd*), b_cmd(Text*, Cmd*);
     81 int	c_cmd(Text*, Cmd*), d_cmd(Text*, Cmd*);
     82 int	B_cmd(Text*, Cmd*), D_cmd(Text*, Cmd*), e_cmd(Text*, Cmd*);
     83 int	f_cmd(Text*, Cmd*), g_cmd(Text*, Cmd*), i_cmd(Text*, Cmd*);
     84 int	k_cmd(Text*, Cmd*), m_cmd(Text*, Cmd*), n_cmd(Text*, Cmd*);
     85 int	p_cmd(Text*, Cmd*);
     86 int	s_cmd(Text*, Cmd*), u_cmd(Text*, Cmd*), w_cmd(Text*, Cmd*);
     87 int	x_cmd(Text*, Cmd*), X_cmd(Text*, Cmd*), pipe_cmd(Text*, Cmd*);
     88 int	eq_cmd(Text*, Cmd*);
     89 
     90 String	*allocstring(int);
     91 void		freestring(String*);
     92 String	*getregexp(int);
     93 Addr	*newaddr(void);
     94 Address	cmdaddress(Addr*, Address, int);
     95 int	cmdexec(Text*, Cmd*);
     96 void	editerror(char*, ...);
     97 int	cmdlookup(int);
     98 void	resetxec(void);
     99 void	Straddc(String*, int);