Blame


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