all callers passed in O_SHELL value, change ex_exec_proc to just use it
[nvi.git] / ex / ex.h
blobf1a28c7b507b6dd890553959d1f4adb38c67ea27
1 /*-
2 * Copyright (c) 1992, 1993
3 * The Regents of the University of California. All rights reserved.
5 * %sccs.include.redist.c%
7 * $Id: ex.h,v 8.36 1993/12/02 10:57:04 bostic Exp $ (Berkeley) $Date: 1993/12/02 10:57:04 $
8 */
10 /* Ex command structure. */
11 typedef struct _excmdlist {
12 char *name; /* Command name. */
13 /* Underlying function. */
14 int (*fn) __P((SCR *, EXF *, EXCMDARG *));
16 #define E_ADDR1 0x0000001 /* One address. */
17 #define E_ADDR2 0x0000002 /* Two address. */
18 #define E_ADDR2_ALL 0x0000004 /* Zero/two addresses; zero == all. */
19 #define E_ADDR2_NONE 0x0000008 /* Zero/two addresses; zero == none. */
20 #define E_ADDRDEF 0x0000010 /* Default addresses used. */
21 #define E_BUFFER 0x0000020 /* Buffer name supplied. */
22 #define E_COUNT 0x0000040 /* Count supplied. */
23 #define E_FORCE 0x0000080 /* ! */
25 #define E_F_CARAT 0x0000100 /* ^ flag. */
26 #define E_F_DASH 0x0000200 /* - flag. */
27 #define E_F_DOT 0x0000400 /* . flag. */
28 #define E_F_EQUAL 0x0000800 /* = flag. */
29 #define E_F_HASH 0x0001000 /* # flag. */
30 #define E_F_LIST 0x0002000 /* l flag. */
31 #define E_F_PLUS 0x0004000 /* + flag. */
32 #define E_F_PRINT 0x0008000 /* p flag. */
34 #define E_F_PRCLEAR 0x0010000 /* Clear the print (#, l, p) flags. */
35 #define E_MODIFY 0x0020000 /* File name expansion modified arg. */
36 #define E_NOGLOBAL 0x0040000 /* Not in a global. */
37 #define E_NOPERM 0x0080000 /* Permission denied for now. */
38 #define E_NORC 0x0100000 /* Not from a .exrc or EXINIT. */
39 #define E_SETLAST 0x0200000 /* Reset last command. */
40 #define E_ZERO 0x0400000 /* 0 is a legal addr1. */
41 #define E_ZERODEF 0x0800000 /* 0 is default addr1 of empty files. */
42 u_long flags;
43 char *syntax; /* Syntax script. */
44 char *usage; /* Usage line. */
45 char *help; /* Help line. */
46 } EXCMDLIST;
47 #define MAXCMDNAMELEN 12 /* Longest command name. */
48 extern EXCMDLIST const cmds[]; /* List of ex commands. */
50 /* Structure passed around to functions implementing ex commands. */
51 struct _excmdarg {
52 EXCMDLIST const *cmd; /* Command entry in command table. */
53 CHAR_T buffer; /* Named buffer. */
54 recno_t lineno; /* Line number. */
55 long count; /* Signed, specified count. */
56 int addrcnt; /* Number of addresses (0, 1 or 2). */
57 MARK addr1; /* 1st address. */
58 MARK addr2; /* 2nd address. */
59 ARGS **argv; /* Array of arguments. */
60 int argc; /* Count of arguments. */
61 u_int flags; /* Selected flags from EXCMDLIST. */
64 /* Ex private, per-screen memory. */
65 typedef struct _ex_private {
66 ARGS **args; /* Arguments. */
67 int argscnt; /* Argument count. */
68 int argsoff; /* Offset into arguments. */
70 CHAR_T at_lbuf; /* Last executed at buffer's name. */
71 int at_lbuf_set; /* If at_lbuf is set. */
73 char *ibp; /* Line input buffer. */
74 size_t ibp_len; /* Line input buffer length. */
76 EXCMDLIST const *lastcmd; /* Last command. */
78 CHAR_T *lastbcomm; /* Last bang command. */
80 TAILQ_HEAD(_tagh, _tag) tagq; /* Tag stack. */
81 TAILQ_HEAD(_tagfh, _tagf) tagfq;/* Tag stack. */
82 char *tlast; /* Saved last tag. */
83 } EX_PRIVATE;
84 #define EXP(sp) ((EX_PRIVATE *)((sp)->ex_private))
86 /* Macro to set up a command structure. */
87 #define SETCMDARG(s, cmd_id, naddr, lno1, lno2, force, arg) { \
88 ARGS *__ap[2], __a; \
89 memset(&s, 0, sizeof(EXCMDARG)); \
90 s.cmd = &cmds[cmd_id]; \
91 s.addrcnt = (naddr); \
92 s.addr1.lno = (lno1); \
93 s.addr2.lno = (lno2); \
94 s.addr1.cno = s.addr2.cno = 1; \
95 if (force) \
96 s.flags |= E_FORCE; \
97 if ((__a.bp = arg) == NULL) { \
98 s.argc = 0; \
99 __a.len = strlen(arg); \
100 } else { \
101 s.argc = 1; \
102 __a.len = 0; \
104 __ap[0] = &__a; \
105 __ap[1] = NULL; \
106 s.argv = __ap; \
110 * :next, :prev, :rewind, :tag, :tagpush, :tagpop modifications check.
111 * If force is set, the autowrite is skipped.
113 #define MODIFY_CHECK(sp, ep, force) { \
114 if (F_ISSET((ep), F_MODIFIED)) \
115 if (O_ISSET((sp), O_AUTOWRITE)) { \
116 if (!(force) && \
117 file_write((sp), (ep), NULL, NULL, NULL, \
118 FS_ALL | FS_POSSIBLE)) \
119 return (1); \
120 } else if (ep->refcnt <= 1 && !(force)) { \
121 msgq(sp, M_ERR, \
122 "Modified since last write; write or use ! to override."); \
123 return (1); \
128 * Filter actions:
130 * FILTER Filter text through the utility.
131 * FILTER_READ Read from the utility into the file.
132 * FILTER_WRITE Write to the utility, display its output.
134 enum filtertype { FILTER, FILTER_READ, FILTER_WRITE };
135 int filtercmd __P((SCR *, EXF *,
136 MARK *, MARK *, MARK *, char *, enum filtertype));
138 /* Argument expansion routines. */
139 int argv_exp0 __P((SCR *, EXF *, EXCMDARG *, char *, size_t));
140 int argv_exp1 __P((SCR *, EXF *, EXCMDARG *, char *, size_t, int));
141 int argv_exp2 __P((SCR *, EXF *, EXCMDARG *, char *, size_t, int));
142 int argv_exp3 __P((SCR *, EXF *, EXCMDARG *, char *, size_t));
143 int argv_free __P((SCR *));
145 /* Ex function prototypes. */
146 int ex __P((SCR *, EXF *));
147 int ex_cfile __P((SCR *, EXF *, char *));
148 int ex_cmd __P((SCR *, EXF *, char *, size_t));
149 int ex_end __P((SCR *));
150 int ex_exec_proc __P((SCR *, char *, char *, char *));
151 int ex_gb __P((SCR *, EXF *, TEXTH *, int, u_int));
152 int ex_getline __P((SCR *, FILE *, size_t *));
153 int ex_icmd __P((SCR *, EXF *, char *, size_t));
154 int ex_init __P((SCR *, EXF *));
155 int ex_optchange __P((SCR *, int));
156 int ex_print __P((SCR *, EXF *, MARK *, MARK *, int));
157 int ex_readfp __P((SCR *, EXF *, char *, FILE *, MARK *, recno_t *, int));
158 void ex_refresh __P((SCR *, EXF *));
159 int ex_screen_copy __P((SCR *, SCR *));
160 int ex_screen_end __P((SCR *));
161 int ex_sdisplay __P((SCR *, EXF *));
162 int ex_suspend __P((SCR *));
163 int ex_tdisplay __P((SCR *, EXF *));
164 int ex_writefp __P((SCR *, EXF *,
165 char *, FILE *, MARK *, MARK *, u_long *, u_long *));
166 int proc_wait __P((SCR *, long, const char *, int));
167 int sscr_end __P((SCR *));
168 int sscr_exec __P((SCR *, EXF *, recno_t));
169 int sscr_input __P((SCR *));
171 #define EXPROTO(type, name) \
172 type name __P((SCR *, EXF *, EXCMDARG *))
174 EXPROTO(int, ex_abbr);
175 EXPROTO(int, ex_append);
176 EXPROTO(int, ex_args);
177 EXPROTO(int, ex_at);
178 EXPROTO(int, ex_bang);
179 EXPROTO(int, ex_bg);
180 EXPROTO(int, ex_cd);
181 EXPROTO(int, ex_change);
182 EXPROTO(int, ex_color);
183 EXPROTO(int, ex_copy);
184 EXPROTO(int, ex_debug);
185 EXPROTO(int, ex_delete);
186 EXPROTO(int, ex_digraph);
187 EXPROTO(int, ex_display);
188 EXPROTO(int, ex_edit);
189 EXPROTO(int, ex_equal);
190 EXPROTO(int, ex_fg);
191 EXPROTO(int, ex_file);
192 EXPROTO(int, ex_global);
193 EXPROTO(int, ex_help);
194 EXPROTO(int, ex_insert);
195 EXPROTO(int, ex_join);
196 EXPROTO(int, ex_list);
197 EXPROTO(int, ex_map);
198 EXPROTO(int, ex_mark);
199 EXPROTO(int, ex_mkexrc);
200 EXPROTO(int, ex_move);
201 EXPROTO(int, ex_next);
202 EXPROTO(int, ex_number);
203 EXPROTO(int, ex_open);
204 EXPROTO(int, ex_pr);
205 EXPROTO(int, ex_preserve);
206 EXPROTO(int, ex_prev);
207 EXPROTO(int, ex_put);
208 EXPROTO(int, ex_quit);
209 EXPROTO(int, ex_read);
210 EXPROTO(int, ex_resize);
211 EXPROTO(int, ex_rew);
212 EXPROTO(int, ex_script);
213 EXPROTO(int, ex_set);
214 EXPROTO(int, ex_shell);
215 EXPROTO(int, ex_shiftl);
216 EXPROTO(int, ex_shiftr);
217 EXPROTO(int, ex_source);
218 EXPROTO(int, ex_split);
219 EXPROTO(int, ex_stop);
220 EXPROTO(int, ex_subagain);
221 EXPROTO(int, ex_substitute);
222 EXPROTO(int, ex_subtilde);
223 EXPROTO(int, ex_tagpop);
224 EXPROTO(int, ex_tagpush);
225 EXPROTO(int, ex_tagtop);
226 EXPROTO(int, ex_unabbr);
227 EXPROTO(int, ex_undo);
228 EXPROTO(int, ex_undol);
229 EXPROTO(int, ex_unmap);
230 EXPROTO(int, ex_usage);
231 EXPROTO(int, ex_validate);
232 EXPROTO(int, ex_version);
233 EXPROTO(int, ex_vglobal);
234 EXPROTO(int, ex_visual);
235 EXPROTO(int, ex_viusage);
236 EXPROTO(int, ex_wq);
237 EXPROTO(int, ex_write);
238 EXPROTO(int, ex_xit);
239 EXPROTO(int, ex_yank);
240 EXPROTO(int, ex_z);