OpenCoverage

text.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/lib/readline/text.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* text.c -- text handling commands for readline. */-
2-
3/* Copyright (C) 1987-2017 Free Software Foundation, Inc.-
4-
5 This file is part of the GNU Readline Library (Readline), a library-
6 for reading lines of text with interactive input and history editing. -
7-
8 Readline is free software: you can redistribute it and/or modify-
9 it under the terms of the GNU General Public License as published by-
10 the Free Software Foundation, either version 3 of the License, or-
11 (at your option) any later version.-
12-
13 Readline is distributed in the hope that it will be useful,-
14 but WITHOUT ANY WARRANTY; without even the implied warranty of-
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
16 GNU General Public License for more details.-
17-
18 You should have received a copy of the GNU General Public License-
19 along with Readline. If not, see <http://www.gnu.org/licenses/>.-
20*/-
21-
22#define READLINE_LIBRARY-
23-
24#if defined (HAVE_CONFIG_H)-
25# include <config.h>-
26#endif-
27-
28#if defined (HAVE_UNISTD_H)-
29# include <unistd.h>-
30#endif /* HAVE_UNISTD_H */-
31-
32#if defined (HAVE_STDLIB_H)-
33# include <stdlib.h>-
34#else-
35# include "ansi_stdlib.h"-
36#endif /* HAVE_STDLIB_H */-
37-
38#if defined (HAVE_LOCALE_H)-
39# include <locale.h>-
40#endif-
41-
42#include <stdio.h>-
43-
44/* System-specific feature definitions and include files. */-
45#include "rldefs.h"-
46#include "rlmbutil.h"-
47-
48#if defined (__EMX__)-
49# define INCL_DOSPROCESS-
50# include <os2.h>-
51#endif /* __EMX__ */-
52-
53/* Some standard library routines. */-
54#include "readline.h"-
55#include "history.h"-
56-
57#include "rlprivate.h"-
58#include "rlshell.h"-
59#include "xmalloc.h"-
60-
61/* Forward declarations. */-
62static int rl_change_case PARAMS((int, int));-
63static int _rl_char_search PARAMS((int, int, int));-
64-
65#if defined (READLINE_CALLBACKS)-
66static int _rl_insert_next_callback PARAMS((_rl_callback_generic_arg *));-
67static int _rl_char_search_callback PARAMS((_rl_callback_generic_arg *));-
68#endif-
69-
70/* The largest chunk of text that can be inserted in one call to-
71 rl_insert_text. Text blocks larger than this are divided. */-
72#define TEXT_COUNT_MAX 1024-
73-
74int _rl_optimize_typeahead = 1; /* rl_insert tries to read typeahead */-
75-
76/* **************************************************************** */-
77/* */-
78/* Insert and Delete */-
79/* */-
80/* **************************************************************** */-
81-
82/* Insert a string of text into the line at point. This is the only-
83 way that you should do insertion. _rl_insert_char () calls this-
84 function. Returns the number of characters inserted. */-
85int-
86rl_insert_text (const char *string)-
87{-
88 register int i, l;-
89-
90 l = (string && *string) ? strlen (string) : 0;
stringDescription
TRUEnever evaluated
FALSEnever evaluated
*stringDescription
TRUEnever evaluated
FALSEnever evaluated
0
91 if (l == 0)
l == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
92 return 0;
never executed: return 0;
0
93-
94 if (rl_end + l >= rl_line_buffer_len)
rl_end + l >= ...ine_buffer_lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
95 rl_extend_line_buffer (rl_end + l);
never executed: rl_extend_line_buffer (rl_end + l);
0
96-
97 for (i = rl_end; i >= rl_point; i--)
i >= rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
98 rl_line_buffer[i + l] = rl_line_buffer[i];
never executed: rl_line_buffer[i + l] = rl_line_buffer[i];
0
99 strncpy (rl_line_buffer + rl_point, string, l);-
100-
101 /* Remember how to undo this if we aren't undoing something. */-
102 if (_rl_doing_an_undo == 0)
_rl_doing_an_undo == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
103 {-
104 /* If possible and desirable, concatenate the undos. */-
105 if ((l == 1) &&
(l == 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
106 rl_undo_list &&
rl_undo_listDescription
TRUEnever evaluated
FALSEnever evaluated
0
107 (rl_undo_list->what == UNDO_INSERT) &&
(rl_undo_list-...= UNDO_INSERT)Description
TRUEnever evaluated
FALSEnever evaluated
0
108 (rl_undo_list->end == rl_point) &&
(rl_undo_list-...d == rl_point)Description
TRUEnever evaluated
FALSEnever evaluated
0
109 (rl_undo_list->end - rl_undo_list->start < 20))
(rl_undo_list-...t->start < 20)Description
TRUEnever evaluated
FALSEnever evaluated
0
110 rl_undo_list->end++;
never executed: rl_undo_list->end++;
0
111 else-
112 rl_add_undo (UNDO_INSERT, rl_point, rl_point + l, (char *)NULL);
never executed: rl_add_undo (UNDO_INSERT, rl_point, rl_point + l, (char *) ((void *)0) );
0
113 }-
114 rl_point += l;-
115 rl_end += l;-
116 rl_line_buffer[rl_end] = '\0';-
117 return l;
never executed: return l;
0
118}-
119-
120/* Delete the string between FROM and TO. FROM is inclusive, TO is not.-
121 Returns the number of characters deleted. */-
122int-
123rl_delete_text (int from, int to)-
124{-
125 register char *text;-
126 register int diff, i;-
127-
128 /* Fix it if the caller is confused. */-
129 if (from > to)
from > toDescription
TRUEnever evaluated
FALSEnever evaluated
0
130 SWAP (from, to);
never executed: end of block
0
131-
132 /* fix boundaries */-
133 if (to > rl_end)
to > rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
134 {-
135 to = rl_end;-
136 if (from > to)
from > toDescription
TRUEnever evaluated
FALSEnever evaluated
0
137 from = to;
never executed: from = to;
0
138 }
never executed: end of block
0
139 if (from < 0)
from < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
140 from = 0;
never executed: from = 0;
0
141-
142 text = rl_copy_text (from, to);-
143-
144 /* Some versions of strncpy() can't handle overlapping arguments. */-
145 diff = to - from;-
146 for (i = from; i < rl_end - diff; i++)
i < rl_end - diffDescription
TRUEnever evaluated
FALSEnever evaluated
0
147 rl_line_buffer[i] = rl_line_buffer[i + diff];
never executed: rl_line_buffer[i] = rl_line_buffer[i + diff];
0
148-
149 /* Remember how to undo this delete. */-
150 if (_rl_doing_an_undo == 0)
_rl_doing_an_undo == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
151 rl_add_undo (UNDO_DELETE, from, to, text);
never executed: rl_add_undo (UNDO_DELETE, from, to, text);
0
152 else-
153 xfree (text);
never executed: xfree (text);
0
154-
155 rl_end -= diff;-
156 rl_line_buffer[rl_end] = '\0';-
157 return (diff);
never executed: return (diff);
0
158}-
159-
160/* Fix up point so that it is within the line boundaries after killing-
161 text. If FIX_MARK_TOO is non-zero, the mark is forced within line-
162 boundaries also. */-
163-
164#define _RL_FIX_POINT(x) \-
165 do { \-
166 if (x > rl_end) \-
167 x = rl_end; \-
168 else if (x < 0) \-
169 x = 0; \-
170 } while (0)-
171-
172void-
173_rl_fix_point (int fix_mark_too)-
174{-
175 _RL_FIX_POINT (rl_point);
never executed: rl_point = rl_end;
never executed: rl_point = 0;
rl_point < 0Description
TRUEnever evaluated
FALSEnever evaluated
rl_point > rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
176 if (fix_mark_too)
fix_mark_tooDescription
TRUEnever evaluated
FALSEnever evaluated
0
177 _RL_FIX_POINT (rl_mark);
never executed: rl_mark = rl_end;
never executed: rl_mark = 0;
never executed: end of block
rl_mark < 0Description
TRUEnever evaluated
FALSEnever evaluated
rl_mark > rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
178}
never executed: end of block
0
179#undef _RL_FIX_POINT-
180-
181/* Replace the contents of the line buffer between START and END with-
182 TEXT. The operation is undoable. To replace the entire line in an-
183 undoable mode, use _rl_replace_text(text, 0, rl_end); */-
184int-
185_rl_replace_text (const char *text, int start, int end)-
186{-
187 int n;-
188-
189 n = 0;-
190 rl_begin_undo_group ();-
191 if (start <= end)
start <= endDescription
TRUEnever evaluated
FALSEnever evaluated
0
192 rl_delete_text (start, end + 1);
never executed: rl_delete_text (start, end + 1);
0
193 rl_point = start;-
194 if (*text)
*textDescription
TRUEnever evaluated
FALSEnever evaluated
0
195 n = rl_insert_text (text);
never executed: n = rl_insert_text (text);
0
196 rl_end_undo_group ();-
197-
198 return n;
never executed: return n;
0
199}-
200-
201/* Replace the current line buffer contents with TEXT. If CLEAR_UNDO is-
202 non-zero, we free the current undo list. */-
203void-
204rl_replace_line (const char *text, int clear_undo)-
205{-
206 int len;-
207-
208 len = strlen (text);-
209 if (len >= rl_line_buffer_len)
len >= rl_line_buffer_lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
210 rl_extend_line_buffer (len);
never executed: rl_extend_line_buffer (len);
0
211 strcpy (rl_line_buffer, text);-
212 rl_end = len;-
213-
214 if (clear_undo)
clear_undoDescription
TRUEnever evaluated
FALSEnever evaluated
0
215 rl_free_undo_list ();
never executed: rl_free_undo_list ();
0
216-
217 _rl_fix_point (1);-
218}
never executed: end of block
0
219-
220/* **************************************************************** */-
221/* */-
222/* Readline character functions */-
223/* */-
224/* **************************************************************** */-
225-
226/* This is not a gap editor, just a stupid line input routine. No hair-
227 is involved in writing any of the functions, and none should be. */-
228-
229/* Note that:-
230-
231 rl_end is the place in the string that we would place '\0';-
232 i.e., it is always safe to place '\0' there.-
233-
234 rl_point is the place in the string where the cursor is. Sometimes-
235 this is the same as rl_end.-
236-
237 Any command that is called interactively receives two arguments.-
238 The first is a count: the numeric arg passed to this command.-
239 The second is the key which invoked this command.-
240*/-
241-
242/* **************************************************************** */-
243/* */-
244/* Movement Commands */-
245/* */-
246/* **************************************************************** */-
247-
248/* Note that if you `optimize' the display for these functions, you cannot-
249 use said functions in other functions which do not do optimizing display.-
250 I.e., you will have to update the data base for rl_redisplay, and you-
251 might as well let rl_redisplay do that job. */-
252-
253/* Move forward COUNT bytes. */-
254int-
255rl_forward_byte (int count, int key)-
256{-
257 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
258 return (rl_backward_byte (-count, key));
never executed: return (rl_backward_byte (-count, key));
0
259-
260 if (count > 0)
count > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
261 {-
262 int end, lend;-
263-
264 end = rl_point + count;-
265#if defined (VI_MODE)-
266 lend = rl_end > 0 ? rl_end - (VI_COMMAND_MODE()) : rl_end;
rl_end > 0Description
TRUEnever evaluated
FALSEnever evaluated
rl_editing_mode == 0Description
TRUEnever evaluated
FALSEnever evaluated
_rl_keymap == ...ovement_keymapDescription
TRUEnever evaluated
FALSEnever evaluated
0
267#else-
268 lend = rl_end;-
269#endif-
270-
271 if (end > lend)
end > lendDescription
TRUEnever evaluated
FALSEnever evaluated
0
272 {-
273 rl_point = lend;-
274 rl_ding ();-
275 }
never executed: end of block
0
276 else-
277 rl_point = end;
never executed: rl_point = end;
0
278 }-
279-
280 if (rl_end < 0)
rl_end < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
281 rl_end = 0;
never executed: rl_end = 0;
0
282-
283 return 0;
never executed: return 0;
0
284}-
285-
286int-
287_rl_forward_char_internal (int count)-
288{-
289 int point;-
290-
291#if defined (HANDLE_MULTIBYTE)-
292 point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO);-
293-
294#if defined (VI_MODE)-
295 if (point >= rl_end && VI_COMMAND_MODE())
point >= rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
rl_editing_mode == 0Description
TRUEnever evaluated
FALSEnever evaluated
_rl_keymap == ...ovement_keymapDescription
TRUEnever evaluated
FALSEnever evaluated
0
296 point = _rl_find_prev_mbchar (rl_line_buffer, rl_end, MB_FIND_NONZERO);
never executed: point = _rl_find_prev_mbchar (rl_line_buffer, rl_end, 0x01);
0
297#endif-
298-
299 if (rl_end < 0)
rl_end < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
300 rl_end = 0;
never executed: rl_end = 0;
0
301#else-
302 point = rl_point + count;-
303 if (point > rl_end)-
304 point = rl_end;-
305#endif-
306-
307 return (point);
never executed: return (point);
0
308}-
309-
310#if defined (HANDLE_MULTIBYTE)-
311/* Move forward COUNT characters. */-
312int-
313rl_forward_char (int count, int key)-
314{-
315 int point;-
316-
317 if (MB_CUR_MAX == 1 || rl_byte_oriented)
(__ctype_get_m...r_max ()) == 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_orientedDescription
TRUEnever evaluated
FALSEnever evaluated
0
318 return (rl_forward_byte (count, key));
never executed: return (rl_forward_byte (count, key));
0
319-
320 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
321 return (rl_backward_char (-count, key));
never executed: return (rl_backward_char (-count, key));
0
322-
323 if (count > 0)
count > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
324 {-
325 if (rl_point == rl_end && EMACS_MODE())
rl_point == rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
(rl_editing_mode == 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
326 {-
327 rl_ding ();-
328 return 0;
never executed: return 0;
0
329 }-
330-
331 point = _rl_forward_char_internal (count);-
332-
333 if (rl_point == point)
rl_point == pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
334 rl_ding ();
never executed: rl_ding ();
0
335-
336 rl_point = point;-
337 }
never executed: end of block
0
338-
339 return 0;
never executed: return 0;
0
340}-
341#else /* !HANDLE_MULTIBYTE */-
342int-
343rl_forward_char (int count, int key)-
344{-
345 return (rl_forward_byte (count, key));-
346}-
347#endif /* !HANDLE_MULTIBYTE */-
348 -
349/* Backwards compatibility. */-
350int-
351rl_forward (int count, int key)-
352{-
353 return (rl_forward_char (count, key));
never executed: return (rl_forward_char (count, key));
0
354}-
355-
356/* Move backward COUNT bytes. */-
357int-
358rl_backward_byte (int count, int key)-
359{-
360 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
361 return (rl_forward_byte (-count, key));
never executed: return (rl_forward_byte (-count, key));
0
362-
363 if (count > 0)
count > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
364 {-
365 if (rl_point < count)
rl_point < countDescription
TRUEnever evaluated
FALSEnever evaluated
0
366 {-
367 rl_point = 0;-
368 rl_ding ();-
369 }
never executed: end of block
0
370 else-
371 rl_point -= count;
never executed: rl_point -= count;
0
372 }-
373-
374 if (rl_point < 0)
rl_point < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
375 rl_point = 0;
never executed: rl_point = 0;
0
376-
377 return 0;
never executed: return 0;
0
378}-
379-
380#if defined (HANDLE_MULTIBYTE)-
381/* Move backward COUNT characters. */-
382int-
383rl_backward_char (int count, int key)-
384{-
385 int point;-
386-
387 if (MB_CUR_MAX == 1 || rl_byte_oriented)
(__ctype_get_m...r_max ()) == 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_orientedDescription
TRUEnever evaluated
FALSEnever evaluated
0
388 return (rl_backward_byte (count, key));
never executed: return (rl_backward_byte (count, key));
0
389-
390 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
391 return (rl_forward_char (-count, key));
never executed: return (rl_forward_char (-count, key));
0
392-
393 if (count > 0)
count > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
394 {-
395 point = rl_point;-
396-
397 while (count > 0 && point > 0)
count > 0Description
TRUEnever evaluated
FALSEnever evaluated
point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
398 {-
399 point = _rl_find_prev_mbchar (rl_line_buffer, point, MB_FIND_NONZERO);-
400 count--;-
401 }
never executed: end of block
0
402 if (count > 0)
count > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
403 {-
404 rl_point = 0;-
405 rl_ding ();-
406 }
never executed: end of block
0
407 else-
408 rl_point = point;
never executed: rl_point = point;
0
409 }-
410-
411 return 0;
never executed: return 0;
0
412}-
413#else-
414int-
415rl_backward_char (int count, int key)-
416{-
417 return (rl_backward_byte (count, key));-
418}-
419#endif-
420-
421/* Backwards compatibility. */-
422int-
423rl_backward (int count, int key)-
424{-
425 return (rl_backward_char (count, key));
never executed: return (rl_backward_char (count, key));
0
426}-
427-
428/* Move to the beginning of the line. */-
429int-
430rl_beg_of_line (int count, int key)-
431{-
432 rl_point = 0;-
433 return 0;
never executed: return 0;
0
434}-
435-
436/* Move to the end of the line. */-
437int-
438rl_end_of_line (int count, int key)-
439{-
440 rl_point = rl_end;-
441 return 0;
never executed: return 0;
0
442}-
443-
444/* Move forward a word. We do what Emacs does. Handles multibyte chars. */-
445int-
446rl_forward_word (int count, int key)-
447{-
448 int c;-
449-
450 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
451 return (rl_backward_word (-count, key));
never executed: return (rl_backward_word (-count, key));
0
452-
453 while (count)
countDescription
TRUEnever evaluated
FALSEnever evaluated
0
454 {-
455 if (rl_point == rl_end)
rl_point == rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
456 return 0;
never executed: return 0;
0
457-
458 /* If we are not in a word, move forward until we are in one.-
459 Then, move forward until we hit a non-alphabetic character. */-
460 c = _rl_char_value (rl_line_buffer, rl_point);-
461-
462 if (_rl_walphabetic (c) == 0)
_rl_walphabetic (c) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
463 {-
464 rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
465 while (rl_point < rl_end)
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
466 {-
467 c = _rl_char_value (rl_line_buffer, rl_point);-
468 if (_rl_walphabetic (c))
_rl_walphabetic (c)Description
TRUEnever evaluated
FALSEnever evaluated
0
469 break;
never executed: break;
0
470 rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
471 }
never executed: end of block
0
472 }
never executed: end of block
0
473-
474 if (rl_point == rl_end)
rl_point == rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
475 return 0;
never executed: return 0;
0
476-
477 rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
478 while (rl_point < rl_end)
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
479 {-
480 c = _rl_char_value (rl_line_buffer, rl_point);-
481 if (_rl_walphabetic (c) == 0)
_rl_walphabetic (c) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
482 break;
never executed: break;
0
483 rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
484 }
never executed: end of block
0
485-
486 --count;-
487 }
never executed: end of block
0
488-
489 return 0;
never executed: return 0;
0
490}-
491-
492/* Move backward a word. We do what Emacs does. Handles multibyte chars. */-
493int-
494rl_backward_word (int count, int key)-
495{-
496 int c, p;-
497-
498 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
499 return (rl_forward_word (-count, key));
never executed: return (rl_forward_word (-count, key));
0
500-
501 while (count)
countDescription
TRUEnever evaluated
FALSEnever evaluated
0
502 {-
503 if (rl_point == 0)
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
504 return 0;
never executed: return 0;
0
505-
506 /* Like rl_forward_word (), except that we look at the characters-
507 just before point. */-
508-
509 p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
510 c = _rl_char_value (rl_line_buffer, p);-
511-
512 if (_rl_walphabetic (c) == 0)
_rl_walphabetic (c) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
513 {-
514 rl_point = p;-
515 while (rl_point > 0)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
516 {-
517 p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
518 c = _rl_char_value (rl_line_buffer, p);-
519 if (_rl_walphabetic (c))
_rl_walphabetic (c)Description
TRUEnever evaluated
FALSEnever evaluated
0
520 break;
never executed: break;
0
521 rl_point = p;-
522 }
never executed: end of block
0
523 }
never executed: end of block
0
524-
525 while (rl_point)
rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
526 {-
527 p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
528 c = _rl_char_value (rl_line_buffer, p); -
529 if (_rl_walphabetic (c) == 0)
_rl_walphabetic (c) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
530 break;
never executed: break;
0
531 else-
532 rl_point = p;
never executed: rl_point = p;
0
533 }-
534-
535 --count;-
536 }
never executed: end of block
0
537-
538 return 0;
never executed: return 0;
0
539}-
540-
541/* Clear the current line. Numeric argument to C-l does this. */-
542int-
543rl_refresh_line (int ignore1, int ignore2)-
544{-
545 int curr_line;-
546-
547 curr_line = _rl_current_display_line ();-
548-
549 _rl_move_vert (curr_line);-
550 _rl_move_cursor_relative (0, rl_line_buffer); /* XXX is this right */-
551-
552 _rl_clear_to_eol (0); /* arg of 0 means to not use spaces */-
553-
554 rl_redraw_prompt_last_line ();-
555 rl_display_fixed = 1;-
556-
557 return 0;
never executed: return 0;
0
558}-
559-
560/* C-l typed to a line without quoting clears the screen, and then reprints-
561 the prompt and the current input line. Given a numeric arg, redraw only-
562 the current line. */-
563int-
564rl_clear_screen (int count, int key)-
565{-
566 if (rl_explicit_arg)
rl_explicit_argDescription
TRUEnever evaluated
FALSEnever evaluated
0
567 {-
568 rl_refresh_line (count, key);-
569 return 0;
never executed: return 0;
0
570 }-
571-
572 _rl_clear_screen (); /* calls termcap function to clear screen */-
573 rl_forced_update_display ();-
574 rl_display_fixed = 1;-
575-
576 return 0;
never executed: return 0;
0
577}-
578-
579int-
580rl_previous_screen_line (int count, int key)-
581{-
582 int c;-
583-
584 c = _rl_term_autowrap ? _rl_screenwidth : (_rl_screenwidth + 1);
_rl_term_autowrapDescription
TRUEnever evaluated
FALSEnever evaluated
0
585 return (rl_backward_char (c, key));
never executed: return (rl_backward_char (c, key));
0
586}-
587-
588int-
589rl_next_screen_line (int count, int key)-
590{-
591 int c;-
592-
593 c = _rl_term_autowrap ? _rl_screenwidth : (_rl_screenwidth + 1);
_rl_term_autowrapDescription
TRUEnever evaluated
FALSEnever evaluated
0
594 return (rl_forward_char (c, key));
never executed: return (rl_forward_char (c, key));
0
595}-
596-
597int-
598rl_skip_csi_sequence (int count, int key)-
599{-
600 int ch;-
601-
602 RL_SETSTATE (RL_STATE_MOREINPUT);-
603 do-
604 ch = rl_read_key ();
never executed: ch = rl_read_key ();
0
605 while (ch >= 0x20 && ch < 0x40);
ch >= 0x20Description
TRUEnever evaluated
FALSEnever evaluated
ch < 0x40Description
TRUEnever evaluated
FALSEnever evaluated
0
606 RL_UNSETSTATE (RL_STATE_MOREINPUT);-
607-
608 return (ch < 0);
never executed: return (ch < 0);
0
609}-
610-
611int-
612rl_arrow_keys (int count, int key)-
613{-
614 int ch;-
615-
616 RL_SETSTATE(RL_STATE_MOREINPUT);-
617 ch = rl_read_key ();-
618 RL_UNSETSTATE(RL_STATE_MOREINPUT);-
619 if (ch < 0)
ch < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
620 return (1);
never executed: return (1);
0
621-
622 switch (_rl_to_upper (ch))
never executed: end of block
never executed: __res = toupper ( (unsigned char)ch );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)ch )];
sizeof ( (unsi... char)ch ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...gned char)ch )Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned char)(ch) == (ch))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
623 {-
624 case 'A':
never executed: case 'A':
0
625 rl_get_previous_history (count, ch);-
626 break;
never executed: break;
0
627-
628 case 'B':
never executed: case 'B':
0
629 rl_get_next_history (count, ch);-
630 break;
never executed: break;
0
631-
632 case 'C':
never executed: case 'C':
0
633 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
634 rl_forward_char (count, ch);
never executed: rl_forward_char (count, ch);
0
635 else-
636 rl_forward_byte (count, ch);
never executed: rl_forward_byte (count, ch);
0
637 break;
never executed: break;
0
638-
639 case 'D':
never executed: case 'D':
0
640 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
641 rl_backward_char (count, ch);
never executed: rl_backward_char (count, ch);
0
642 else-
643 rl_backward_byte (count, ch);
never executed: rl_backward_byte (count, ch);
0
644 break;
never executed: break;
0
645-
646 default:
never executed: default:
0
647 rl_ding ();-
648 }
never executed: end of block
0
649-
650 return 0;
never executed: return 0;
0
651}-
652-
653/* **************************************************************** */-
654/* */-
655/* Text commands */-
656/* */-
657/* **************************************************************** */-
658-
659#ifdef HANDLE_MULTIBYTE-
660static char pending_bytes[MB_LEN_MAX];-
661static int pending_bytes_length = 0;-
662static mbstate_t ps = {0};-
663#endif-
664-
665/* Insert the character C at the current location, moving point forward.-
666 If C introduces a multibyte sequence, we read the whole sequence and-
667 then insert the multibyte char into the line buffer. */-
668int-
669_rl_insert_char (int count, int c)-
670{-
671 register int i;-
672 char *string;-
673#ifdef HANDLE_MULTIBYTE-
674 int string_size;-
675 char incoming[MB_LEN_MAX + 1];-
676 int incoming_length = 0;-
677 mbstate_t ps_back;-
678 static int stored_count = 0;-
679#endif-
680-
681 if (count <= 0)
count <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
682 return 0;
never executed: return 0;
0
683-
684#if defined (HANDLE_MULTIBYTE)-
685 if (MB_CUR_MAX == 1 || rl_byte_oriented)
(__ctype_get_m...r_max ()) == 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_orientedDescription
TRUEnever evaluated
FALSEnever evaluated
0
686 {-
687 incoming[0] = c;-
688 incoming[1] = '\0';-
689 incoming_length = 1;-
690 }
never executed: end of block
0
691 else if (_rl_utf8locale && (c & 0x80) == 0)
_rl_utf8localeDescription
TRUEnever evaluated
FALSEnever evaluated
(c & 0x80) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
692 {-
693 incoming[0] = c;-
694 incoming[1] = '\0';-
695 incoming_length = 1;-
696 }
never executed: end of block
0
697 else-
698 {-
699 wchar_t wc;-
700 size_t ret;-
701-
702 if (stored_count <= 0)
stored_count <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
703 stored_count = count;
never executed: stored_count = count;
0
704 else-
705 count = stored_count;
never executed: count = stored_count;
0
706-
707 ps_back = ps;-
708 pending_bytes[pending_bytes_length++] = c;-
709 ret = mbrtowc (&wc, pending_bytes, pending_bytes_length, &ps);-
710-
711 if (ret == (size_t)-2)
ret == (size_t)-2Description
TRUEnever evaluated
FALSEnever evaluated
0
712 {-
713 /* Bytes too short to compose character, try to wait for next byte.-
714 Restore the state of the byte sequence, because in this case the-
715 effect of mbstate is undefined. */-
716 ps = ps_back;-
717 return 1;
never executed: return 1;
0
718 }-
719 else if (ret == (size_t)-1)
ret == (size_t)-1Description
TRUEnever evaluated
FALSEnever evaluated
0
720 {-
721 /* Invalid byte sequence for the current locale. Treat first byte-
722 as a single character. */-
723 incoming[0] = pending_bytes[0];-
724 incoming[1] = '\0';-
725 incoming_length = 1;-
726 pending_bytes_length--;-
727 memmove (pending_bytes, pending_bytes + 1, pending_bytes_length);-
728 /* Clear the state of the byte sequence, because in this case the-
729 effect of mbstate is undefined. */-
730 memset (&ps, 0, sizeof (mbstate_t));-
731 }
never executed: end of block
0
732 else if (ret == (size_t)0)
ret == (size_t)0Description
TRUEnever evaluated
FALSEnever evaluated
0
733 {-
734 incoming[0] = '\0';-
735 incoming_length = 0;-
736 pending_bytes_length--;-
737 /* Clear the state of the byte sequence, because in this case the-
738 effect of mbstate is undefined. */-
739 memset (&ps, 0, sizeof (mbstate_t));-
740 }
never executed: end of block
0
741 else if (ret == 1)
ret == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
742 {-
743 incoming[0] = pending_bytes[0];-
744 incoming[incoming_length = 1] = '\0';-
745 pending_bytes_length = 0;-
746 }
never executed: end of block
0
747 else-
748 {-
749 /* We successfully read a single multibyte character. */-
750 memcpy (incoming, pending_bytes, pending_bytes_length);-
751 incoming[pending_bytes_length] = '\0';-
752 incoming_length = pending_bytes_length;-
753 pending_bytes_length = 0;-
754 }
never executed: end of block
0
755 }-
756#endif /* HANDLE_MULTIBYTE */-
757 -
758 /* If we can optimize, then do it. But don't let people crash-
759 readline because of extra large arguments. */-
760 if (count > 1 && count <= TEXT_COUNT_MAX)
count > 1Description
TRUEnever evaluated
FALSEnever evaluated
count <= 1024Description
TRUEnever evaluated
FALSEnever evaluated
0
761 {-
762#if defined (HANDLE_MULTIBYTE)-
763 string_size = count * incoming_length;-
764 string = (char *)xmalloc (1 + string_size);-
765-
766 i = 0;-
767 while (i < string_size)
i < string_sizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
768 {-
769 if (incoming_length == 1)
incoming_length == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
770 string[i++] = *incoming;
never executed: string[i++] = *incoming;
0
771 else-
772 {-
773 strncpy (string + i, incoming, incoming_length);-
774 i += incoming_length;-
775 }
never executed: end of block
0
776 }-
777 incoming_length = 0;-
778 stored_count = 0;-
779#else /* !HANDLE_MULTIBYTE */-
780 string = (char *)xmalloc (1 + count);-
781-
782 for (i = 0; i < count; i++)-
783 string[i] = c;-
784#endif /* !HANDLE_MULTIBYTE */-
785-
786 string[i] = '\0';-
787 rl_insert_text (string);-
788 xfree (string);-
789-
790 return 0;
never executed: return 0;
0
791 }-
792-
793 if (count > TEXT_COUNT_MAX)
count > 1024Description
TRUEnever evaluated
FALSEnever evaluated
0
794 {-
795 int decreaser;-
796#if defined (HANDLE_MULTIBYTE)-
797 string_size = incoming_length * TEXT_COUNT_MAX;-
798 string = (char *)xmalloc (1 + string_size);-
799-
800 i = 0;-
801 while (i < string_size)
i < string_sizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
802 {-
803 if (incoming_length == 1)
incoming_length == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
804 string[i++] = *incoming;
never executed: string[i++] = *incoming;
0
805 else-
806 {-
807 strncpy (string + i, incoming, incoming_length);-
808 i += incoming_length;-
809 }
never executed: end of block
0
810 }-
811-
812 while (count)
countDescription
TRUEnever evaluated
FALSEnever evaluated
0
813 {-
814 decreaser = (count > TEXT_COUNT_MAX) ? TEXT_COUNT_MAX : count;
(count > 1024)Description
TRUEnever evaluated
FALSEnever evaluated
0
815 string[decreaser*incoming_length] = '\0';-
816 rl_insert_text (string);-
817 count -= decreaser;-
818 }
never executed: end of block
0
819-
820 xfree (string);-
821 incoming_length = 0;-
822 stored_count = 0;-
823#else /* !HANDLE_MULTIBYTE */-
824 char str[TEXT_COUNT_MAX+1];-
825-
826 for (i = 0; i < TEXT_COUNT_MAX; i++)-
827 str[i] = c;-
828-
829 while (count)-
830 {-
831 decreaser = (count > TEXT_COUNT_MAX ? TEXT_COUNT_MAX : count);-
832 str[decreaser] = '\0';-
833 rl_insert_text (str);-
834 count -= decreaser;-
835 }-
836#endif /* !HANDLE_MULTIBYTE */-
837-
838 return 0;
never executed: return 0;
0
839 }-
840-
841 if (MB_CUR_MAX == 1 || rl_byte_oriented)
(__ctype_get_m...r_max ()) == 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_orientedDescription
TRUEnever evaluated
FALSEnever evaluated
0
842 {-
843 /* We are inserting a single character.-
844 If there is pending input, then make a string of all of the-
845 pending characters that are bound to rl_insert, and insert-
846 them all. Don't do this if we're current reading input from-
847 a macro. */-
848 if ((RL_ISSTATE (RL_STATE_MACROINPUT) == 0) && _rl_pushed_input_available ())
((rl_readline_...000800)) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
_rl_pushed_input_available ()Description
TRUEnever evaluated
FALSEnever evaluated
0
849 _rl_insert_typein (c);
never executed: _rl_insert_typein (c);
0
850 else-
851 {-
852 /* Inserting a single character. */-
853 char str[2];-
854-
855 str[1] = '\0';-
856 str[0] = c;-
857 rl_insert_text (str);-
858 }
never executed: end of block
0
859 }-
860#if defined (HANDLE_MULTIBYTE)-
861 else-
862 {-
863 rl_insert_text (incoming);-
864 stored_count = 0;-
865 }
never executed: end of block
0
866#endif-
867-
868 return 0;
never executed: return 0;
0
869}-
870-
871/* Overwrite the character at point (or next COUNT characters) with C.-
872 If C introduces a multibyte character sequence, read the entire sequence-
873 before starting the overwrite loop. */-
874int-
875_rl_overwrite_char (int count, int c)-
876{-
877 int i;-
878#if defined (HANDLE_MULTIBYTE)-
879 char mbkey[MB_LEN_MAX];-
880 int k;-
881-
882 /* Read an entire multibyte character sequence to insert COUNT times. */-
883 if (count > 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0)
count > 0Description
TRUEnever evaluated
FALSEnever evaluated
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
884 k = _rl_read_mbstring (c, mbkey, MB_LEN_MAX);
never executed: k = _rl_read_mbstring (c, mbkey, 16 );
0
885#endif-
886-
887 rl_begin_undo_group ();-
888-
889 for (i = 0; i < count; i++)
i < countDescription
TRUEnever evaluated
FALSEnever evaluated
0
890 {-
891#if defined (HANDLE_MULTIBYTE)-
892 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
893 rl_insert_text (mbkey);
never executed: rl_insert_text (mbkey);
0
894 else-
895#endif-
896 _rl_insert_char (1, c);
never executed: _rl_insert_char (1, c);
0
897-
898 if (rl_point < rl_end)
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
899 rl_delete (1, c);
never executed: rl_delete (1, c);
0
900 }
never executed: end of block
0
901-
902 rl_end_undo_group ();-
903-
904 return 0;
never executed: return 0;
0
905}-
906-
907int-
908rl_insert (int count, int c)-
909{-
910 int r, n, x;-
911-
912 r = (rl_insert_mode == RL_IM_INSERT) ? _rl_insert_char (count, c) : _rl_overwrite_char (count, c);
(rl_insert_mode == 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
913-
914 /* XXX -- attempt to batch-insert pending input that maps to self-insert */-
915 x = 0;-
916 n = (unsigned short)-2;-
917 while (_rl_optimize_typeahead &&
_rl_optimize_typeaheadDescription
TRUEnever evaluated
FALSEnever evaluated
0
918 rl_num_chars_to_read == 0 &&
rl_num_chars_to_read == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
919 (RL_ISSTATE (RL_STATE_INPUTPENDING|RL_STATE_MACROINPUT) == 0) &&
((rl_readline_...000800)) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
920 _rl_pushed_input_available () == 0 &&
_rl_pushed_inp...ilable () == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
921 _rl_input_queued (0) &&
_rl_input_queued (0)Description
TRUEnever evaluated
FALSEnever evaluated
0
922 (n = rl_read_key ()) > 0 &&
(n = rl_read_key ()) > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
923 _rl_keymap[(unsigned char)n].type == ISFUNC &&
_rl_keymap[(un...r)n].type == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
924 _rl_keymap[(unsigned char)n].function == rl_insert)
_rl_keymap[(un...n == rl_insertDescription
TRUEnever evaluated
FALSEnever evaluated
0
925 {-
926 r = (rl_insert_mode == RL_IM_INSERT) ? _rl_insert_char (1, n) : _rl_overwrite_char (1, n);
(rl_insert_mode == 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
927 /* _rl_insert_char keeps its own set of pending characters to compose a-
928 complete multibyte character, and only returns 1 if it sees a character-
929 that's part of a multibyte character but too short to complete one. We-
930 can try to read another character in the hopes that we will get the-
931 next one or just punt. Right now we try to read another character.-
932 We don't want to call rl_insert_next if _rl_insert_char has already-
933 stored the character in the pending_bytes array because that will-
934 result in doubled input. */-
935 n = (unsigned short)-2;-
936 x++; /* count of bytes of typeahead read, currently unused */-
937 if (r == 1) /* read partial multibyte character */
r == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
938 continue;
never executed: continue;
0
939 if (rl_done || r != 0)
rl_doneDescription
TRUEnever evaluated
FALSEnever evaluated
r != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
940 break;
never executed: break;
0
941 }
never executed: end of block
0
942-
943 if (n != (unsigned short)-2) /* -2 = sentinel value for having inserted N */
n != (unsigned short)-2Description
TRUEnever evaluated
FALSEnever evaluated
0
944 {-
945 /* setting rl_pending_input inhibits setting rl_last_func so we do it-
946 ourselves here */-
947 rl_last_func = rl_insert; -
948 _rl_reset_argument ();-
949 rl_executing_keyseq[rl_key_sequence_length = 0] = '\0';-
950 r = rl_execute_next (n);-
951 }
never executed: end of block
0
952-
953 return r;
never executed: return r;
0
954}-
955-
956/* Insert the next typed character verbatim. */-
957static int-
958_rl_insert_next (int count)-
959{-
960 int c;-
961-
962 RL_SETSTATE(RL_STATE_MOREINPUT);-
963 c = rl_read_key ();-
964 RL_UNSETSTATE(RL_STATE_MOREINPUT);-
965-
966 if (c < 0)
c < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
967 return 1;
never executed: return 1;
0
968-
969 if (RL_ISSTATE (RL_STATE_MACRODEF))
(rl_readline_s...& (0x0001000))Description
TRUEnever evaluated
FALSEnever evaluated
0
970 _rl_add_macro_char (c);
never executed: _rl_add_macro_char (c);
0
971-
972#if defined (HANDLE_SIGNALS)-
973 if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
(rl_readline_s...0080000)) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
974 _rl_restore_tty_signals ();
never executed: _rl_restore_tty_signals ();
0
975#endif-
976-
977 return (_rl_insert_char (count, c));
never executed: return (_rl_insert_char (count, c));
0
978}-
979-
980#if defined (READLINE_CALLBACKS)-
981static int-
982_rl_insert_next_callback (_rl_callback_generic_arg *data)-
983{-
984 int count, r;-
985-
986 count = data->count;-
987 r = 0;-
988-
989 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
990 {-
991 data->count++;-
992 r = _rl_insert_next (1);-
993 _rl_want_redisplay = 1;-
994 /* If we should keep going, leave the callback function installed */-
995 if (data->count < 0 && r == 0)
data->count < 0Description
TRUEnever evaluated
FALSEnever evaluated
r == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
996 return r;
never executed: return r;
0
997 count = 0; /* data->count == 0 || r != 0; force break below */-
998 }
never executed: end of block
0
999-
1000 /* Deregister function, let rl_callback_read_char deallocate data */-
1001 _rl_callback_func = 0;-
1002 _rl_want_redisplay = 1;-
1003-
1004 if (count == 0)
count == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1005 return r;
never executed: return r;
0
1006-
1007 return _rl_insert_next (count);
never executed: return _rl_insert_next (count);
0
1008}-
1009#endif-
1010 -
1011int-
1012rl_quoted_insert (int count, int key)-
1013{-
1014 /* Let's see...should the callback interface futz with signal handling? */-
1015#if defined (HANDLE_SIGNALS)-
1016 if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
(rl_readline_s...0080000)) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1017 _rl_disable_tty_signals ();
never executed: _rl_disable_tty_signals ();
0
1018#endif-
1019-
1020#if defined (READLINE_CALLBACKS)-
1021 if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1022 {-
1023 _rl_callback_data = _rl_callback_data_alloc (count);-
1024 _rl_callback_func = _rl_insert_next_callback;-
1025 return (0);
never executed: return (0);
0
1026 }-
1027#endif-
1028-
1029 /* A negative count means to quote the next -COUNT characters. */-
1030 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1031 {-
1032 int r;-
1033-
1034 do-
1035 r = _rl_insert_next (1);
never executed: r = _rl_insert_next (1);
0
1036 while (r == 0 && ++count < 0);
r == 0Description
TRUEnever evaluated
FALSEnever evaluated
++count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1037 return r;
never executed: return r;
0
1038 }-
1039-
1040 return _rl_insert_next (count);
never executed: return _rl_insert_next (count);
0
1041}-
1042-
1043/* Insert a tab character. */-
1044int-
1045rl_tab_insert (int count, int key)-
1046{-
1047 return (_rl_insert_char (count, '\t'));
never executed: return (_rl_insert_char (count, '\t'));
0
1048}-
1049-
1050/* What to do when a NEWLINE is pressed. We accept the whole line.-
1051 KEY is the key that invoked this command. I guess it could have-
1052 meaning in the future. */-
1053int-
1054rl_newline (int count, int key)-
1055{-
1056 rl_done = 1;-
1057-
1058 if (_rl_history_preserve_point)
_rl_history_preserve_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
1059 _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point;
never executed: _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point;
(rl_point == rl_end)Description
TRUEnever evaluated
FALSEnever evaluated
0
1060-
1061 RL_SETSTATE(RL_STATE_DONE);-
1062-
1063#if defined (VI_MODE)-
1064 if (rl_editing_mode == vi_mode)
rl_editing_mode == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1065 {-
1066 _rl_vi_done_inserting ();-
1067 if (_rl_vi_textmod_command (_rl_vi_last_command) == 0) /* XXX */
_rl_vi_textmod..._command) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1068 _rl_vi_reset_last ();
never executed: _rl_vi_reset_last ();
0
1069 }
never executed: end of block
0
1070#endif /* VI_MODE */-
1071-
1072 /* If we've been asked to erase empty lines, suppress the final update,-
1073 since _rl_update_final calls rl_crlf(). */-
1074 if (rl_erase_empty_line && rl_point == 0 && rl_end == 0)
rl_erase_empty_lineDescription
TRUEnever evaluated
FALSEnever evaluated
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
rl_end == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1075 return 0;
never executed: return 0;
0
1076-
1077 if (_rl_echoing_p)
_rl_echoing_pDescription
TRUEnever evaluated
FALSEnever evaluated
0
1078 _rl_update_final ();
never executed: _rl_update_final ();
0
1079 return 0;
never executed: return 0;
0
1080}-
1081-
1082/* What to do for some uppercase characters, like meta characters,-
1083 and some characters appearing in emacs_ctlx_keymap. This function-
1084 is just a stub, you bind keys to it and the code in _rl_dispatch ()-
1085 is special cased. */-
1086int-
1087rl_do_lowercase_version (int ignore1, int ignore2)-
1088{-
1089 return 0;
never executed: return 0;
0
1090}-
1091-
1092/* This is different from what vi does, so the code's not shared. Emacs-
1093 rubout in overwrite mode has one oddity: it replaces a control-
1094 character that's displayed as two characters (^X) with two spaces. */-
1095int-
1096_rl_overwrite_rubout (int count, int key)-
1097{-
1098 int opoint;-
1099 int i, l;-
1100-
1101 if (rl_point == 0)
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1102 {-
1103 rl_ding ();-
1104 return 1;
never executed: return 1;
0
1105 }-
1106-
1107 opoint = rl_point;-
1108-
1109 /* L == number of spaces to insert */-
1110 for (i = l = 0; i < count; i++)
i < countDescription
TRUEnever evaluated
FALSEnever evaluated
0
1111 {-
1112 rl_backward_char (1, key);-
1113 l += rl_character_len (rl_line_buffer[rl_point], rl_point); /* not exactly right */-
1114 }
never executed: end of block
0
1115-
1116 rl_begin_undo_group ();-
1117-
1118 if (count > 1 || rl_explicit_arg)
count > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_explicit_argDescription
TRUEnever evaluated
FALSEnever evaluated
0
1119 rl_kill_text (opoint, rl_point);
never executed: rl_kill_text (opoint, rl_point);
0
1120 else-
1121 rl_delete_text (opoint, rl_point);
never executed: rl_delete_text (opoint, rl_point);
0
1122-
1123 /* Emacs puts point at the beginning of the sequence of spaces. */-
1124 if (rl_point < rl_end)
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1125 {-
1126 opoint = rl_point;-
1127 _rl_insert_char (l, ' ');-
1128 rl_point = opoint;-
1129 }
never executed: end of block
0
1130-
1131 rl_end_undo_group ();-
1132-
1133 return 0;
never executed: return 0;
0
1134}-
1135 -
1136/* Rubout the character behind point. */-
1137int-
1138rl_rubout (int count, int key)-
1139{-
1140 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1141 return (rl_delete (-count, key));
never executed: return (rl_delete (-count, key));
0
1142-
1143 if (!rl_point)
!rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
1144 {-
1145 rl_ding ();-
1146 return 1;
never executed: return 1;
0
1147 }-
1148-
1149 if (rl_insert_mode == RL_IM_OVERWRITE)
rl_insert_mode == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1150 return (_rl_overwrite_rubout (count, key));
never executed: return (_rl_overwrite_rubout (count, key));
0
1151-
1152 return (_rl_rubout_char (count, key));
never executed: return (_rl_rubout_char (count, key));
0
1153}-
1154-
1155int-
1156_rl_rubout_char (int count, int key)-
1157{-
1158 int orig_point;-
1159 unsigned char c;-
1160-
1161 /* Duplicated code because this is called from other parts of the library. */-
1162 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1163 return (rl_delete (-count, key));
never executed: return (rl_delete (-count, key));
0
1164-
1165 if (rl_point == 0)
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1166 {-
1167 rl_ding ();-
1168 return 1;
never executed: return 1;
0
1169 }-
1170-
1171 orig_point = rl_point;-
1172 if (count > 1 || rl_explicit_arg)
count > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_explicit_argDescription
TRUEnever evaluated
FALSEnever evaluated
0
1173 {-
1174 rl_backward_char (count, key);-
1175 rl_kill_text (orig_point, rl_point);-
1176 }
never executed: end of block
0
1177 else if (MB_CUR_MAX == 1 || rl_byte_oriented)
(__ctype_get_m...r_max ()) == 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_orientedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1178 {-
1179 c = rl_line_buffer[--rl_point];-
1180 rl_delete_text (rl_point, orig_point);-
1181 /* The erase-at-end-of-line hack is of questionable merit now. */-
1182 if (rl_point == rl_end && ISPRINT ((unsigned char)c) && _rl_last_c_pos)
rl_point == rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISprint)Description
TRUEnever evaluated
FALSEnever evaluated
_rl_last_c_posDescription
TRUEnever evaluated
FALSEnever evaluated
0
1183 {-
1184 int l;-
1185 l = rl_character_len (c, rl_point);-
1186 _rl_erase_at_end_of_line (l);-
1187 }
never executed: end of block
0
1188 }
never executed: end of block
0
1189 else-
1190 {-
1191 rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);-
1192 rl_delete_text (rl_point, orig_point);-
1193 }
never executed: end of block
0
1194-
1195 return 0;
never executed: return 0;
0
1196}-
1197-
1198/* Delete the character under the cursor. Given a numeric argument,-
1199 kill that many characters instead. */-
1200int-
1201rl_delete (int count, int key)-
1202{-
1203 int xpoint;-
1204-
1205 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1206 return (_rl_rubout_char (-count, key));
never executed: return (_rl_rubout_char (-count, key));
0
1207-
1208 if (rl_point == rl_end)
rl_point == rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1209 {-
1210 rl_ding ();-
1211 return 1;
never executed: return 1;
0
1212 }-
1213-
1214 if (count > 1 || rl_explicit_arg)
count > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_explicit_argDescription
TRUEnever evaluated
FALSEnever evaluated
0
1215 {-
1216 xpoint = rl_point;-
1217 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1218 rl_forward_char (count, key);
never executed: rl_forward_char (count, key);
0
1219 else-
1220 rl_forward_byte (count, key);
never executed: rl_forward_byte (count, key);
0
1221-
1222 rl_kill_text (xpoint, rl_point);-
1223 rl_point = xpoint;-
1224 }
never executed: end of block
0
1225 else-
1226 {-
1227 xpoint = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1228 rl_delete_text (rl_point, xpoint);-
1229 }
never executed: end of block
0
1230 return 0;
never executed: return 0;
0
1231}-
1232-
1233/* Delete the character under the cursor, unless the insertion-
1234 point is at the end of the line, in which case the character-
1235 behind the cursor is deleted. COUNT is obeyed and may be used-
1236 to delete forward or backward that many characters. */ -
1237int-
1238rl_rubout_or_delete (int count, int key)-
1239{-
1240 if (rl_end != 0 && rl_point == rl_end)
rl_end != 0Description
TRUEnever evaluated
FALSEnever evaluated
rl_point == rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1241 return (_rl_rubout_char (count, key));
never executed: return (_rl_rubout_char (count, key));
0
1242 else-
1243 return (rl_delete (count, key));
never executed: return (rl_delete (count, key));
0
1244} -
1245-
1246/* Delete all spaces and tabs around point. */-
1247int-
1248rl_delete_horizontal_space (int count, int ignore)-
1249{-
1250 int start;-
1251-
1252 while (rl_point && whitespace (rl_line_buffer[rl_point - 1]))
rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff... - 1]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...- 1]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1253 rl_point--;
never executed: rl_point--;
0
1254-
1255 start = rl_point;-
1256-
1257 while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point]))
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1258 rl_point++;
never executed: rl_point++;
0
1259-
1260 if (start != rl_point)
start != rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
1261 {-
1262 rl_delete_text (start, rl_point);-
1263 rl_point = start;-
1264 }
never executed: end of block
0
1265-
1266 if (rl_point < 0)
rl_point < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1267 rl_point = 0;
never executed: rl_point = 0;
0
1268-
1269 return 0;
never executed: return 0;
0
1270}-
1271-
1272/* Like the tcsh editing function delete-char-or-list. The eof character-
1273 is caught before this is invoked, so this really does the same thing as-
1274 delete-char-or-list-or-eof, as long as it's bound to the eof character. */-
1275int-
1276rl_delete_or_show_completions (int count, int key)-
1277{-
1278 if (rl_end != 0 && rl_point == rl_end)
rl_end != 0Description
TRUEnever evaluated
FALSEnever evaluated
rl_point == rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1279 return (rl_possible_completions (count, key));
never executed: return (rl_possible_completions (count, key));
0
1280 else-
1281 return (rl_delete (count, key));
never executed: return (rl_delete (count, key));
0
1282}-
1283-
1284#ifndef RL_COMMENT_BEGIN_DEFAULT-
1285#define RL_COMMENT_BEGIN_DEFAULT "#"-
1286#endif-
1287-
1288/* Turn the current line into a comment in shell history.-
1289 A K*rn shell style function. */-
1290int-
1291rl_insert_comment (int count, int key)-
1292{-
1293 char *rl_comment_text;-
1294 int rl_comment_len;-
1295-
1296 rl_beg_of_line (1, key);-
1297 rl_comment_text = _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT;
_rl_comment_beginDescription
TRUEnever evaluated
FALSEnever evaluated
0
1298-
1299 if (rl_explicit_arg == 0)
rl_explicit_arg == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1300 rl_insert_text (rl_comment_text);
never executed: rl_insert_text (rl_comment_text);
0
1301 else-
1302 {-
1303 rl_comment_len = strlen (rl_comment_text);-
1304 if (STREQN (rl_comment_text, rl_line_buffer, rl_comment_len))
never executed: __result = (((const unsigned char *) (const char *) ( (rl_comment_text) ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( (rl_line_buffer) ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(((rl_comment_...en) ))) == 0))Description
TRUEnever evaluated
FALSEnever evaluated
((rl_comment_len) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
((rl_comment_t...ne_buffer)[0])Description
TRUEnever evaluated
FALSEnever evaluated
( (__extension...len) ))) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...comment_len) )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...omment_text) )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( (rl_c...omment_len) ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...line_buffer) )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( (rl_l...omment_len) ))Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1305 rl_delete_text (rl_point, rl_point + rl_comment_len);
never executed: rl_delete_text (rl_point, rl_point + rl_comment_len);
0
1306 else-
1307 rl_insert_text (rl_comment_text);
never executed: rl_insert_text (rl_comment_text);
0
1308 }-
1309-
1310 (*rl_redisplay_function) ();-
1311 rl_newline (1, '\n');-
1312-
1313 return (0);
never executed: return (0);
0
1314}-
1315-
1316/* **************************************************************** */-
1317/* */-
1318/* Changing Case */-
1319/* */-
1320/* **************************************************************** */-
1321-
1322/* The three kinds of things that we know how to do. */-
1323#define UpCase 1-
1324#define DownCase 2-
1325#define CapCase 3-
1326-
1327/* Uppercase the word at point. */-
1328int-
1329rl_upcase_word (int count, int key)-
1330{-
1331 return (rl_change_case (count, UpCase));
never executed: return (rl_change_case (count, 1));
0
1332}-
1333-
1334/* Lowercase the word at point. */-
1335int-
1336rl_downcase_word (int count, int key)-
1337{-
1338 return (rl_change_case (count, DownCase));
never executed: return (rl_change_case (count, 2));
0
1339}-
1340-
1341/* Upcase the first letter, downcase the rest. */-
1342int-
1343rl_capitalize_word (int count, int key)-
1344{-
1345 return (rl_change_case (count, CapCase));
never executed: return (rl_change_case (count, 3));
0
1346}-
1347-
1348/* The meaty function.-
1349 Change the case of COUNT words, performing OP on them.-
1350 OP is one of UpCase, DownCase, or CapCase.-
1351 If a negative argument is given, leave point where it started,-
1352 otherwise, leave it where it moves to. */-
1353static int-
1354rl_change_case (int count, int op)-
1355{-
1356 int start, next, end;-
1357 int inword, nc, nop;-
1358 wchar_t c;-
1359#if defined (HANDLE_MULTIBYTE)-
1360 wchar_t wc, nwc;-
1361 char mb[MB_LEN_MAX+1];-
1362 int mlen;-
1363 size_t m;-
1364 mbstate_t mps;-
1365#endif-
1366-
1367 start = rl_point;-
1368 rl_forward_word (count, 0);-
1369 end = rl_point;-
1370-
1371 if (op != UpCase && op != DownCase && op != CapCase)
op != 1Description
TRUEnever evaluated
FALSEnever evaluated
op != 2Description
TRUEnever evaluated
FALSEnever evaluated
op != 3Description
TRUEnever evaluated
FALSEnever evaluated
0
1372 {-
1373 rl_ding ();-
1374 return 1;
never executed: return 1;
0
1375 }-
1376-
1377 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1378 SWAP (start, end);
never executed: end of block
0
1379-
1380#if defined (HANDLE_MULTIBYTE)-
1381 memset (&mps, 0, sizeof (mbstate_t));-
1382#endif-
1383-
1384 /* We are going to modify some text, so let's prepare to undo it. */-
1385 rl_modifying (start, end);-
1386-
1387 inword = 0;-
1388 while (start < end)
start < endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1389 {-
1390 c = _rl_char_value (rl_line_buffer, start);-
1391 /* This assumes that the upper and lower case versions are the same width. */-
1392 next = MB_NEXTCHAR (rl_line_buffer, start, 1, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1393-
1394 if (_rl_walphabetic (c) == 0)
_rl_walphabetic (c) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1395 {-
1396 inword = 0;-
1397 start = next;-
1398 continue;
never executed: continue;
0
1399 }-
1400-
1401 if (op == CapCase)
op == 3Description
TRUEnever evaluated
FALSEnever evaluated
0
1402 {-
1403 nop = inword ? DownCase : UpCase;
inwordDescription
TRUEnever evaluated
FALSEnever evaluated
0
1404 inword = 1;-
1405 }
never executed: end of block
0
1406 else-
1407 nop = op;
never executed: nop = op;
0
1408 /* Can't check isascii here; some languages (e.g, Turkish) have-
1409 multibyte upper and lower case equivalents of single-byte ascii-
1410 characters */-
1411 if (MB_CUR_MAX == 1 || rl_byte_oriented)
(__ctype_get_m...r_max ()) == 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_orientedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1412 {-
1413 nc = (nop == UpCase) ? _rl_to_upper (c) : _rl_to_lower (c);
never executed: end of block
never executed: __res = toupper ( (unsigned char)c );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)c )];
never executed: end of block
never executed: __res = tolower ( (unsigned char)c );
never executed: __res = (*__ctype_tolower_loc ())[(int) ( (unsigned char)c )];
sizeof ( (unsi...d char)c ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...igned char)c )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...d char)c ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...igned char)c )Description
TRUEnever evaluated
FALSEnever evaluated
(nop == 1)Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned char)(c) == (c))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned char)(c) == (c))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
1414 rl_line_buffer[start] = nc;-
1415 }
never executed: end of block
0
1416#if defined (HANDLE_MULTIBYTE)-
1417 else-
1418 {-
1419 m = mbrtowc (&wc, rl_line_buffer + start, end - start, &mps);-
1420 if (MB_INVALIDCH (m))
(m) == (size_t)-1Description
TRUEnever evaluated
FALSEnever evaluated
(m) == (size_t)-2Description
TRUEnever evaluated
FALSEnever evaluated
0
1421 wc = (wchar_t)rl_line_buffer[start];
never executed: wc = (wchar_t)rl_line_buffer[start];
0
1422 else if (MB_NULLWCH (m))
((m) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1423 wc = L'\0';
never executed: wc = L'\0';
0
1424 nwc = (nop == UpCase) ? _rl_to_wupper (wc) : _rl_to_wlower (wc);
(nop == 1)Description
TRUEnever evaluated
FALSEnever evaluated
iswlower (wc)Description
TRUEnever evaluated
FALSEnever evaluated
iswupper (wc)Description
TRUEnever evaluated
FALSEnever evaluated
0
1425 if (nwc != wc) /* just skip unchanged characters */
nwc != wcDescription
TRUEnever evaluated
FALSEnever evaluated
0
1426 {-
1427 char *s, *e;-
1428 mlen = wcrtomb (mb, nwc, &mps);-
1429 if (mlen > 0)
mlen > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1430 mb[mlen] = '\0';
never executed: mb[mlen] = '\0';
0
1431 /* what to do if m != mlen? adjust below */-
1432 /* m == length of old char, mlen == length of new char */-
1433 s = rl_line_buffer + start;-
1434 e = rl_line_buffer + rl_end;-
1435 if (m == mlen)
m == mlenDescription
TRUEnever evaluated
FALSEnever evaluated
0
1436 memcpy (s, mb, mlen);
never executed: memcpy (s, mb, mlen);
0
1437 else if (m > mlen)
m > mlenDescription
TRUEnever evaluated
FALSEnever evaluated
0
1438 {-
1439 memcpy (s, mb, mlen);-
1440 memmove (s + mlen, s + m, (e - s) - m);-
1441 next -= m - mlen; /* next char changes */-
1442 end -= m - mlen; /* end of word changes */-
1443 rl_end -= m - mlen; /* end of line changes */-
1444 rl_line_buffer[rl_end] = 0;-
1445 }
never executed: end of block
0
1446 else if (m < mlen)
m < mlenDescription
TRUEnever evaluated
FALSEnever evaluated
0
1447 {-
1448 rl_extend_line_buffer (mlen - m + 1);-
1449 memmove (s + mlen, s + m, (e - s) - m);-
1450 memcpy (s, mb, mlen);-
1451 next += mlen - m; /* next char changes */-
1452 end += mlen - m; /* end of word changes */-
1453 rl_end += mlen - m; /* end of line changes */-
1454 rl_line_buffer[rl_end] = 0;-
1455 }
never executed: end of block
0
1456 }
never executed: end of block
0
1457 }
never executed: end of block
0
1458#endif-
1459-
1460 start = next;-
1461 }
never executed: end of block
0
1462-
1463 rl_point = end;-
1464 return 0;
never executed: return 0;
0
1465}-
1466-
1467/* **************************************************************** */-
1468/* */-
1469/* Transposition */-
1470/* */-
1471/* **************************************************************** */-
1472-
1473/* Transpose the words at point. If point is at the end of the line,-
1474 transpose the two words before point. */-
1475int-
1476rl_transpose_words (int count, int key)-
1477{-
1478 char *word1, *word2;-
1479 int w1_beg, w1_end, w2_beg, w2_end;-
1480 int orig_point = rl_point;-
1481-
1482 if (!count)
!countDescription
TRUEnever evaluated
FALSEnever evaluated
0
1483 return 0;
never executed: return 0;
0
1484-
1485 /* Find the two words. */-
1486 rl_forward_word (count, key);-
1487 w2_end = rl_point;-
1488 rl_backward_word (1, key);-
1489 w2_beg = rl_point;-
1490 rl_backward_word (count, key);-
1491 w1_beg = rl_point;-
1492 rl_forward_word (1, key);-
1493 w1_end = rl_point;-
1494-
1495 /* Do some check to make sure that there really are two words. */-
1496 if ((w1_beg == w2_beg) || (w2_beg < w1_end))
(w1_beg == w2_beg)Description
TRUEnever evaluated
FALSEnever evaluated
(w2_beg < w1_end)Description
TRUEnever evaluated
FALSEnever evaluated
0
1497 {-
1498 rl_ding ();-
1499 rl_point = orig_point;-
1500 return 1;
never executed: return 1;
0
1501 }-
1502-
1503 /* Get the text of the words. */-
1504 word1 = rl_copy_text (w1_beg, w1_end);-
1505 word2 = rl_copy_text (w2_beg, w2_end);-
1506-
1507 /* We are about to do many insertions and deletions. Remember them-
1508 as one operation. */-
1509 rl_begin_undo_group ();-
1510-
1511 /* Do the stuff at word2 first, so that we don't have to worry-
1512 about word1 moving. */-
1513 rl_point = w2_beg;-
1514 rl_delete_text (w2_beg, w2_end);-
1515 rl_insert_text (word1);-
1516-
1517 rl_point = w1_beg;-
1518 rl_delete_text (w1_beg, w1_end);-
1519 rl_insert_text (word2);-
1520-
1521 /* This is exactly correct since the text before this point has not-
1522 changed in length. */-
1523 rl_point = w2_end;-
1524-
1525 /* I think that does it. */-
1526 rl_end_undo_group ();-
1527 xfree (word1);-
1528 xfree (word2);-
1529-
1530 return 0;
never executed: return 0;
0
1531}-
1532-
1533/* Transpose the characters at point. If point is at the end of the line,-
1534 then transpose the characters before point. */-
1535int-
1536rl_transpose_chars (int count, int key)-
1537{-
1538#if defined (HANDLE_MULTIBYTE)-
1539 char *dummy;-
1540 int i;-
1541#else-
1542 char dummy[2];-
1543#endif-
1544 int char_length, prev_point;-
1545-
1546 if (count == 0)
count == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1547 return 0;
never executed: return 0;
0
1548-
1549 if (!rl_point || rl_end < 2)
!rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
rl_end < 2Description
TRUEnever evaluated
FALSEnever evaluated
0
1550 {-
1551 rl_ding ();-
1552 return 1;
never executed: return 1;
0
1553 }-
1554-
1555 rl_begin_undo_group ();-
1556-
1557 if (rl_point == rl_end)
rl_point == rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1558 {-
1559 rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1560 count = 1;-
1561 }
never executed: end of block
0
1562-
1563 prev_point = rl_point;-
1564 rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1565-
1566#if defined (HANDLE_MULTIBYTE)-
1567 char_length = prev_point - rl_point;-
1568 dummy = (char *)xmalloc (char_length + 1);-
1569 for (i = 0; i < char_length; i++)
i < char_lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
1570 dummy[i] = rl_line_buffer[rl_point + i];
never executed: dummy[i] = rl_line_buffer[rl_point + i];
0
1571 dummy[i] = '\0';-
1572#else-
1573 dummy[0] = rl_line_buffer[rl_point];-
1574 dummy[char_length = 1] = '\0';-
1575#endif-
1576-
1577 rl_delete_text (rl_point, rl_point + char_length);-
1578-
1579 rl_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO);-
1580-
1581 _rl_fix_point (0);-
1582 rl_insert_text (dummy);-
1583 rl_end_undo_group ();-
1584-
1585#if defined (HANDLE_MULTIBYTE)-
1586 xfree (dummy);-
1587#endif-
1588-
1589 return 0;
never executed: return 0;
0
1590}-
1591-
1592/* **************************************************************** */-
1593/* */-
1594/* Character Searching */-
1595/* */-
1596/* **************************************************************** */-
1597-
1598int-
1599#if defined (HANDLE_MULTIBYTE)-
1600_rl_char_search_internal (int count, int dir, char *smbchar, int len)-
1601#else-
1602_rl_char_search_internal (int count, int dir, int schar)-
1603#endif-
1604{-
1605 int pos, inc;-
1606#if defined (HANDLE_MULTIBYTE)-
1607 int prepos;-
1608#endif-
1609-
1610 if (dir == 0)
dir == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1611 return 1;
never executed: return 1;
0
1612-
1613 pos = rl_point;-
1614 inc = (dir < 0) ? -1 : 1;
(dir < 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1615 while (count)
countDescription
TRUEnever evaluated
FALSEnever evaluated
0
1616 {-
1617 if ((dir < 0 && pos <= 0) || (dir > 0 && pos >= rl_end))
dir < 0Description
TRUEnever evaluated
FALSEnever evaluated
pos <= 0Description
TRUEnever evaluated
FALSEnever evaluated
dir > 0Description
TRUEnever evaluated
FALSEnever evaluated
pos >= rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1618 {-
1619 rl_ding ();-
1620 return 1;
never executed: return 1;
0
1621 }-
1622-
1623#if defined (HANDLE_MULTIBYTE)-
1624 pos = (inc > 0) ? _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY)
(inc > 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1625 : _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY);-
1626#else-
1627 pos += inc;-
1628#endif-
1629 do-
1630 {-
1631#if defined (HANDLE_MULTIBYTE)-
1632 if (_rl_is_mbchar_matched (rl_line_buffer, pos, rl_end, smbchar, len))
_rl_is_mbchar_... smbchar, len)Description
TRUEnever evaluated
FALSEnever evaluated
0
1633#else-
1634 if (rl_line_buffer[pos] == schar)-
1635#endif-
1636 {-
1637 count--;-
1638 if (dir < 0)
dir < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1639 rl_point = (dir == BTO) ? _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY)
never executed: rl_point = (dir == -1) ? _rl_find_next_mbchar (rl_line_buffer, pos, 1, 0x00) : pos;
(dir == -1)Description
TRUEnever evaluated
FALSEnever evaluated
0
1640 : pos;
never executed: rl_point = (dir == -1) ? _rl_find_next_mbchar (rl_line_buffer, pos, 1, 0x00) : pos;
0
1641 else-
1642 rl_point = (dir == FTO) ? _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY)
never executed: rl_point = (dir == 1) ? _rl_find_prev_mbchar (rl_line_buffer, pos, 0x00) : pos;
(dir == 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
1643 : pos;
never executed: rl_point = (dir == 1) ? _rl_find_prev_mbchar (rl_line_buffer, pos, 0x00) : pos;
0
1644 break;
never executed: break;
0
1645 }-
1646#if defined (HANDLE_MULTIBYTE)-
1647 prepos = pos;-
1648#endif-
1649 }
never executed: end of block
0
1650#if defined (HANDLE_MULTIBYTE)-
1651 while ((dir < 0) ? (pos = _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY)) != prepos
(dir < 0) ? (p...00)) != preposDescription
TRUEnever evaluated
FALSEnever evaluated
(dir < 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1652 : (pos = _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY)) != prepos);
(dir < 0) ? (p...00)) != preposDescription
TRUEnever evaluated
FALSEnever evaluated
0
1653#else-
1654 while ((dir < 0) ? pos-- : ++pos < rl_end);-
1655#endif-
1656 }
never executed: end of block
0
1657 return (0);
never executed: return (0);
0
1658}-
1659-
1660/* Search COUNT times for a character read from the current input stream.-
1661 FDIR is the direction to search if COUNT is non-negative; otherwise-
1662 the search goes in BDIR. So much is dependent on HANDLE_MULTIBYTE-
1663 that there are two separate versions of this function. */-
1664#if defined (HANDLE_MULTIBYTE)-
1665static int-
1666_rl_char_search (int count, int fdir, int bdir)-
1667{-
1668 char mbchar[MB_LEN_MAX];-
1669 int mb_len;-
1670-
1671 mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX);-
1672-
1673 if (mb_len <= 0)
mb_len <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1674 return 1;
never executed: return 1;
0
1675-
1676 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1677 return (_rl_char_search_internal (-count, bdir, mbchar, mb_len));
never executed: return (_rl_char_search_internal (-count, bdir, mbchar, mb_len));
0
1678 else-
1679 return (_rl_char_search_internal (count, fdir, mbchar, mb_len));
never executed: return (_rl_char_search_internal (count, fdir, mbchar, mb_len));
0
1680}-
1681#else /* !HANDLE_MULTIBYTE */-
1682static int-
1683_rl_char_search (int count, int fdir, int bdir)-
1684{-
1685 int c;-
1686-
1687 RL_SETSTATE(RL_STATE_MOREINPUT);-
1688 c = rl_read_key ();-
1689 RL_UNSETSTATE(RL_STATE_MOREINPUT);-
1690-
1691 if (c < 0)-
1692 return 1;-
1693-
1694 if (count < 0)-
1695 return (_rl_char_search_internal (-count, bdir, c));-
1696 else-
1697 return (_rl_char_search_internal (count, fdir, c));-
1698}-
1699#endif /* !HANDLE_MULTIBYTE */-
1700-
1701#if defined (READLINE_CALLBACKS)-
1702static int-
1703_rl_char_search_callback (data)-
1704 _rl_callback_generic_arg *data;-
1705{-
1706 _rl_callback_func = 0;-
1707 _rl_want_redisplay = 1;-
1708-
1709 return (_rl_char_search (data->count, data->i1, data->i2));
never executed: return (_rl_char_search (data->count, data->i1, data->i2));
0
1710}-
1711#endif-
1712-
1713int-
1714rl_char_search (int count, int key)-
1715{-
1716#if defined (READLINE_CALLBACKS)-
1717 if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1718 {-
1719 _rl_callback_data = _rl_callback_data_alloc (count);-
1720 _rl_callback_data->i1 = FFIND;-
1721 _rl_callback_data->i2 = BFIND;-
1722 _rl_callback_func = _rl_char_search_callback;-
1723 return (0);
never executed: return (0);
0
1724 }-
1725#endif-
1726 -
1727 return (_rl_char_search (count, FFIND, BFIND));
never executed: return (_rl_char_search (count, 2, -2));
0
1728}-
1729-
1730int-
1731rl_backward_char_search (int count, int key)-
1732{-
1733#if defined (READLINE_CALLBACKS)-
1734 if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1735 {-
1736 _rl_callback_data = _rl_callback_data_alloc (count);-
1737 _rl_callback_data->i1 = BFIND;-
1738 _rl_callback_data->i2 = FFIND;-
1739 _rl_callback_func = _rl_char_search_callback;-
1740 return (0);
never executed: return (0);
0
1741 }-
1742#endif-
1743-
1744 return (_rl_char_search (count, BFIND, FFIND));
never executed: return (_rl_char_search (count, -2, 2));
0
1745}-
1746-
1747/* **************************************************************** */-
1748/* */-
1749/* The Mark and the Region. */-
1750/* */-
1751/* **************************************************************** */-
1752-
1753/* Set the mark at POSITION. */-
1754int-
1755_rl_set_mark_at_pos (int position)-
1756{-
1757 if (position < 0 || position > rl_end)
position < 0Description
TRUEnever evaluated
FALSEnever evaluated
position > rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1758 return 1;
never executed: return 1;
0
1759-
1760 rl_mark = position;-
1761 return 0;
never executed: return 0;
0
1762}-
1763-
1764/* A bindable command to set the mark. */-
1765int-
1766rl_set_mark (int count, int key)-
1767{-
1768 return (_rl_set_mark_at_pos (rl_explicit_arg ? count : rl_point));
never executed: return (_rl_set_mark_at_pos (rl_explicit_arg ? count : rl_point));
0
1769}-
1770-
1771/* Exchange the position of mark and point. */-
1772int-
1773rl_exchange_point_and_mark (int count, int key)-
1774{-
1775 if (rl_mark > rl_end)
rl_mark > rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1776 rl_mark = -1;
never executed: rl_mark = -1;
0
1777-
1778 if (rl_mark < 0)
rl_mark < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1779 {-
1780 rl_ding ();-
1781 rl_mark = 0; /* like _RL_FIX_POINT */-
1782 return 1;
never executed: return 1;
0
1783 }-
1784 else-
1785 SWAP (rl_point, rl_mark);
never executed: end of block
0
1786-
1787 return 0;
never executed: return 0;
0
1788}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2