Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | | - |
18 | | - |
19 | | - |
20 | | - |
21 | | - |
22 | #define READLINE_LIBRARY | - |
23 | | - |
24 | #if defined (HAVE_CONFIG_H) | - |
25 | # include <config.h> | - |
26 | #endif | - |
27 | | - |
28 | #include "rlconf.h" | - |
29 | | - |
30 | #if defined (READLINE_CALLBACKS) | - |
31 | | - |
32 | #include <sys/types.h> | - |
33 | | - |
34 | #ifdef HAVE_STDLIB_H | - |
35 | # include <stdlib.h> | - |
36 | #else | - |
37 | # include "ansi_stdlib.h" | - |
38 | #endif | - |
39 | | - |
40 | #include <stdio.h> | - |
41 | | - |
42 | | - |
43 | #include "rldefs.h" | - |
44 | #include "readline.h" | - |
45 | #include "rlprivate.h" | - |
46 | #include "xmalloc.h" | - |
47 | | - |
48 | | - |
49 | | - |
50 | _rl_callback_func_t *_rl_callback_func = 0; | - |
51 | _rl_callback_generic_arg *_rl_callback_data = 0; | - |
52 | | - |
53 | | - |
54 | | - |
55 | | - |
56 | | - |
57 | | - |
58 | | - |
59 | int rl_persistent_signal_handlers = 0; | - |
60 | | - |
61 | | - |
62 | | - |
63 | | - |
64 | | - |
65 | | - |
66 | | - |
67 | | - |
68 | | - |
69 | | - |
70 | | - |
71 | | - |
72 | | - |
73 | | - |
74 | | - |
75 | | - |
76 | | - |
77 | | - |
78 | rl_vcpfunc_t *rl_linefunc; | - |
79 | static int in_handler; | - |
80 | | - |
81 | | - |
82 | static void | - |
83 | _rl_callback_newline (void) | - |
84 | { | - |
85 | rl_initialize (); | - |
86 | | - |
87 | if (in_handler == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
88 | { | - |
89 | in_handler = 1; | - |
90 | | - |
91 | if (rl_prep_term_function)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
92 | (*rl_prep_term_function) (_rl_meta_flag); never executed: (*rl_prep_term_function) (_rl_meta_flag); | 0 |
93 | | - |
94 | #if defined (HANDLE_SIGNALS) | - |
95 | if (rl_persistent_signal_handlers)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
96 | rl_set_signals (); never executed: rl_set_signals (); | 0 |
97 | #endif | - |
98 | } never executed: end of block | 0 |
99 | | - |
100 | readline_internal_setup (); | - |
101 | RL_CHECK_SIGNALS (); never executed: _rl_signal_handler (_rl_caught_signal); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
102 | } never executed: end of block | 0 |
103 | | - |
104 | | - |
105 | void | - |
106 | rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *linefunc) | - |
107 | { | - |
108 | rl_set_prompt (prompt); | - |
109 | RL_SETSTATE (RL_STATE_CALLBACK); | - |
110 | rl_linefunc = linefunc; | - |
111 | _rl_callback_newline (); | - |
112 | } never executed: end of block | 0 |
113 | | - |
114 | #if defined (HANDLE_SIGNALS) | - |
115 | #define CALLBACK_READ_RETURN() \ | - |
116 | do { \ | - |
117 | if (rl_persistent_signal_handlers == 0) \ | - |
118 | rl_clear_signals (); \ | - |
119 | return; \ | - |
120 | } while (0) | - |
121 | #else | - |
122 | #define CALLBACK_READ_RETURN() return | - |
123 | #endif | - |
124 | | - |
125 | | - |
126 | void | - |
127 | rl_callback_read_char (void) | - |
128 | { | - |
129 | char *line; | - |
130 | int eof, jcode; | - |
131 | static procenv_t olevel; | - |
132 | | - |
133 | if (rl_linefunc == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
134 | { | - |
135 | _rl_errmsg ("readline_callback_read_char() called with no handler!"); | - |
136 | abort (); never executed: abort (); | 0 |
137 | } | - |
138 | | - |
139 | memcpy ((void *)olevel, (void *)_rl_top_level, sizeof (procenv_t)); | - |
140 | #if defined (HAVE_POSIX_SIGSETJMP) | - |
141 | jcode = sigsetjmp (_rl_top_level, 0); | - |
142 | #else | - |
143 | jcode = setjmp (_rl_top_level); | - |
144 | #endif | - |
145 | if (jcode)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
146 | { | - |
147 | (*rl_redisplay_function) (); | - |
148 | _rl_want_redisplay = 0; | - |
149 | memcpy ((void *)_rl_top_level, (void *)olevel, sizeof (procenv_t)); | - |
150 | CALLBACK_READ_RETURN (); never executed: return; never executed: rl_clear_signals (); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
151 | } | - |
152 | | - |
153 | #if defined (HANDLE_SIGNALS) | - |
154 | | - |
155 | if (rl_persistent_signal_handlers == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
156 | rl_set_signals (); never executed: rl_set_signals (); | 0 |
157 | #endif | - |
158 | | - |
159 | do | - |
160 | { | - |
161 | RL_CHECK_SIGNALS (); never executed: _rl_signal_handler (_rl_caught_signal); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
162 | if (RL_ISSTATE (RL_STATE_ISEARCH))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
163 | { | - |
164 | eof = _rl_isearch_callback (_rl_iscxt); | - |
165 | if (eof == 0 && (RL_ISSTATE (RL_STATE_ISEARCH) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING))TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
166 | rl_callback_read_char (); never executed: rl_callback_read_char (); | 0 |
167 | | - |
168 | CALLBACK_READ_RETURN (); never executed: return; never executed: rl_clear_signals (); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
169 | } | - |
170 | else if (RL_ISSTATE (RL_STATE_NSEARCH))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
171 | { | - |
172 | eof = _rl_nsearch_callback (_rl_nscxt); | - |
173 | | - |
174 | CALLBACK_READ_RETURN (); never executed: return; never executed: rl_clear_signals (); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
175 | } | - |
176 | #if defined (VI_MODE) | - |
177 | | - |
178 | | - |
179 | else if (RL_ISSTATE (RL_STATE_CHARSEARCH))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
180 | { | - |
181 | int k; | - |
182 | | - |
183 | k = _rl_callback_data->i2; | - |
184 | | - |
185 | eof = (*_rl_callback_func) (_rl_callback_data); | - |
186 | | - |
187 | | - |
188 | if (_rl_callback_func == 0) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
189 | { | - |
190 | if (_rl_callback_data)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
191 | { | - |
192 | _rl_callback_data_dispose (_rl_callback_data); | - |
193 | _rl_callback_data = 0; | - |
194 | } never executed: end of block | 0 |
195 | } never executed: end of block | 0 |
196 | | - |
197 | | - |
198 | if (RL_ISSTATE (RL_STATE_VIMOTION))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
199 | { | - |
200 | _rl_vi_domove_motion_cleanup (k, _rl_vimvcxt); | - |
201 | _rl_internal_char_cleanup (); | - |
202 | CALLBACK_READ_RETURN (); never executed: return; never executed: rl_clear_signals (); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
203 | } | - |
204 | | - |
205 | _rl_internal_char_cleanup (); | - |
206 | } never executed: end of block | 0 |
207 | else if (RL_ISSTATE (RL_STATE_VIMOTION))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
208 | { | - |
209 | eof = _rl_vi_domove_callback (_rl_vimvcxt); | - |
210 | | - |
211 | | - |
212 | if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
213 | _rl_internal_char_cleanup (); never executed: _rl_internal_char_cleanup (); | 0 |
214 | | - |
215 | CALLBACK_READ_RETURN (); never executed: return; never executed: rl_clear_signals (); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
216 | } | - |
217 | #endif | - |
218 | else if (RL_ISSTATE (RL_STATE_NUMERICARG))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
219 | { | - |
220 | eof = _rl_arg_callback (_rl_argcxt); | - |
221 | if (eof == 0 && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING))TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
222 | rl_callback_read_char (); never executed: rl_callback_read_char (); | 0 |
223 | | - |
224 | else if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
225 | _rl_internal_char_cleanup (); never executed: _rl_internal_char_cleanup (); | 0 |
226 | | - |
227 | CALLBACK_READ_RETURN (); never executed: return; never executed: rl_clear_signals (); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
228 | } | - |
229 | else if (RL_ISSTATE (RL_STATE_MULTIKEY))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
230 | { | - |
231 | eof = _rl_dispatch_callback (_rl_kscxt); | - |
232 | while ((eof == -1 || eof == -2) && RL_ISSTATE (RL_STATE_MULTIKEY) && _rl_kscxt && (_rl_kscxt->flags & KSEQ_DISPATCHED))TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
233 | eof = _rl_dispatch_callback (_rl_kscxt); never executed: eof = _rl_dispatch_callback (_rl_kscxt); | 0 |
234 | if (RL_ISSTATE (RL_STATE_MULTIKEY) == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
235 | { | - |
236 | _rl_internal_char_cleanup (); | - |
237 | _rl_want_redisplay = 1; | - |
238 | } never executed: end of block | 0 |
239 | } never executed: end of block | 0 |
240 | else if (_rl_callback_func)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
241 | { | - |
242 | | - |
243 | | - |
244 | | - |
245 | | - |
246 | | - |
247 | | - |
248 | eof = (*_rl_callback_func) (_rl_callback_data); | - |
249 | | - |
250 | | - |
251 | if (_rl_callback_func == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
252 | { | - |
253 | if (_rl_callback_data) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
254 | { | - |
255 | _rl_callback_data_dispose (_rl_callback_data); | - |
256 | _rl_callback_data = 0; | - |
257 | } never executed: end of block | 0 |
258 | _rl_internal_char_cleanup (); | - |
259 | } never executed: end of block | 0 |
260 | } never executed: end of block | 0 |
261 | else | - |
262 | eof = readline_internal_char (); never executed: eof = readline_internal_char (); | 0 |
263 | | - |
264 | RL_CHECK_SIGNALS (); never executed: _rl_signal_handler (_rl_caught_signal); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
265 | if (rl_done == 0 && _rl_want_redisplay)TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
266 | { | - |
267 | (*rl_redisplay_function) (); | - |
268 | _rl_want_redisplay = 0; | - |
269 | } never executed: end of block | 0 |
270 | | - |
271 | if (rl_done)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
272 | { | - |
273 | line = readline_internal_teardown (eof); | - |
274 | | - |
275 | if (rl_deprep_term_function)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
276 | (*rl_deprep_term_function) (); never executed: (*rl_deprep_term_function) (); | 0 |
277 | #if defined (HANDLE_SIGNALS) | - |
278 | rl_clear_signals (); | - |
279 | #endif | - |
280 | in_handler = 0; | - |
281 | (*rl_linefunc) (line); | - |
282 | | - |
283 | | - |
284 | if (rl_line_buffer[0])TRUE | never evaluated | FALSE | never evaluated |
| 0 |
285 | _rl_init_line_state (); never executed: _rl_init_line_state (); | 0 |
286 | | - |
287 | | - |
288 | | - |
289 | if (in_handler == 0 && rl_linefunc)TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
290 | _rl_callback_newline (); never executed: _rl_callback_newline (); | 0 |
291 | } never executed: end of block | 0 |
292 | } never executed: end of block | 0 |
293 | while (rl_pending_input || _rl_pushed_input_available () || RL_ISSTATE (RL_STATE_MACROINPUT));TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
294 | | - |
295 | CALLBACK_READ_RETURN (); never executed: return; never executed: rl_clear_signals (); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
296 | } | - |
297 | | - |
298 | | - |
299 | void | - |
300 | rl_callback_handler_remove (void) | - |
301 | { | - |
302 | rl_linefunc = NULL; | - |
303 | RL_UNSETSTATE (RL_STATE_CALLBACK); | - |
304 | RL_CHECK_SIGNALS (); never executed: _rl_signal_handler (_rl_caught_signal); TRUE | never evaluated | FALSE | never evaluated |
| 0 |
305 | if (in_handler)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
306 | { | - |
307 | in_handler = 0; | - |
308 | if (rl_deprep_term_function)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
309 | (*rl_deprep_term_function) (); never executed: (*rl_deprep_term_function) (); | 0 |
310 | #if defined (HANDLE_SIGNALS) | - |
311 | rl_clear_signals (); | - |
312 | #endif | - |
313 | } never executed: end of block | 0 |
314 | } never executed: end of block | 0 |
315 | | - |
316 | _rl_callback_generic_arg * | - |
317 | _rl_callback_data_alloc (int count) | - |
318 | { | - |
319 | _rl_callback_generic_arg *arg; | - |
320 | | - |
321 | arg = (_rl_callback_generic_arg *)xmalloc (sizeof (_rl_callback_generic_arg)); | - |
322 | arg->count = count; | - |
323 | | - |
324 | arg->i1 = arg->i2 = 0; | - |
325 | | - |
326 | return arg; never executed: return arg; | 0 |
327 | } | - |
328 | | - |
329 | void | - |
330 | _rl_callback_data_dispose (_rl_callback_generic_arg *arg) | - |
331 | { | - |
332 | xfree (arg); | - |
333 | } never executed: end of block | 0 |
334 | | - |
335 | | - |
336 | void | - |
337 | rl_callback_sigcleanup (void) | - |
338 | { | - |
339 | if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
340 | return; never executed: return; | 0 |
341 | | - |
342 | if (RL_ISSTATE (RL_STATE_ISEARCH))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
343 | _rl_isearch_cleanup (_rl_iscxt, 0); never executed: _rl_isearch_cleanup (_rl_iscxt, 0); | 0 |
344 | else if (RL_ISSTATE (RL_STATE_NSEARCH))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
345 | _rl_nsearch_cleanup (_rl_nscxt, 0); never executed: _rl_nsearch_cleanup (_rl_nscxt, 0); | 0 |
346 | else if (RL_ISSTATE (RL_STATE_VIMOTION))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
347 | RL_UNSETSTATE (RL_STATE_VIMOTION); never executed: (rl_readline_state &= ~(0x0100000)); | 0 |
348 | else if (RL_ISSTATE (RL_STATE_NUMERICARG))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
349 | { | - |
350 | _rl_argcxt = 0; | - |
351 | RL_UNSETSTATE (RL_STATE_NUMERICARG); | - |
352 | } never executed: end of block | 0 |
353 | else if (RL_ISSTATE (RL_STATE_MULTIKEY))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
354 | RL_UNSETSTATE (RL_STATE_MULTIKEY); never executed: (rl_readline_state &= ~(0x0200000)); | 0 |
355 | if (RL_ISSTATE (RL_STATE_CHARSEARCH))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
356 | RL_UNSETSTATE (RL_STATE_CHARSEARCH); never executed: (rl_readline_state &= ~(0x0800000)); | 0 |
357 | | - |
358 | _rl_callback_func = 0; | - |
359 | } never executed: end of block | 0 |
360 | #endif | - |
| | |