]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/acme/edit.h
stats: show amount of reclaimable pages (add -r flag)
[plan9front.git] / sys / src / cmd / acme / edit.h
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         };
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         };
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
63 {
64         int     nalloc;
65         int     nused;
66         union{
67                 void    *listptr;
68                 void*   *ptr;
69                 uchar*  *ucharptr;
70                 String* *stringptr;
71         };
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);