Lines Matching refs:cxt

84   _rl_search_cxt *cxt;
86 cxt = (_rl_search_cxt *)xmalloc (sizeof (_rl_search_cxt));
88 cxt->type = type;
89 cxt->sflags = flags;
91 cxt->search_string = 0;
92 cxt->search_string_size = cxt->search_string_index = 0;
94 cxt->lines = 0;
95 cxt->allocated_line = 0;
96 cxt->hlen = cxt->hindex = 0;
98 cxt->save_point = rl_point;
99 cxt->save_mark = rl_mark;
100 cxt->save_line = where_history ();
101 cxt->last_found_line = cxt->save_line;
102 cxt->prev_line_found = 0;
104 cxt->save_undo_list = 0;
106 cxt->history_pos = 0;
107 cxt->direction = 0;
109 cxt->lastc = 0;
111 cxt->sline = 0;
112 cxt->sline_len = cxt->sline_index = 0;
114 cxt->search_terminators = 0;
116 return cxt;
120 _rl_scxt_dispose (cxt, flags)
121 _rl_search_cxt *cxt;
124 FREE (cxt->search_string);
125 FREE (cxt->allocated_line);
126 FREE (cxt->lines);
128 free (cxt);
203 _rl_search_cxt *cxt;
207 cxt = _rl_scxt_alloc (RL_SEARCH_ISEARCH, 0);
209 cxt->sflags |= SF_REVERSE;
211 cxt->search_terminators = _rl_isearch_terminators ? _rl_isearch_terminators
223 cxt->lines = (char **)xmalloc ((1 + (cxt->hlen = i)) * sizeof (char *));
224 for (i = 0; i < cxt->hlen; i++)
225 cxt->lines[i] = hlist[i]->line;
228 cxt->lines[i] = _rl_saved_line_for_history->line;
232 cxt->allocated_line = (char *)xmalloc (1 + strlen (rl_line_buffer));
233 strcpy (cxt->allocated_line, &rl_line_buffer[0]);
234 cxt->lines[i] = cxt->allocated_line;
237 cxt->hlen++;
240 cxt->history_pos = cxt->save_line;
245 cxt->search_string = (char *)xmalloc (cxt->search_string_size = 128);
246 cxt->search_string[cxt->search_string_index = 0] = '\0';
249 cxt->direction = (direction >= 0) ? 1 : -1;
251 cxt->sline = rl_line_buffer;
252 cxt->sline_len = strlen (cxt->sline);
253 cxt->sline_index = rl_point;
255 _rl_iscxt = cxt; /* save globally */
257 return cxt;
261 _rl_isearch_fini (cxt)
262 _rl_search_cxt *cxt;
265 strcpy (rl_line_buffer, cxt->lines[cxt->save_line]);
271 last_isearch_string = cxt->search_string;
272 last_isearch_string_len = cxt->search_string_index;
273 cxt->search_string = 0;
275 if (cxt->last_found_line < cxt->save_line)
276 rl_get_previous_history (cxt->save_line - cxt->last_found_line, 0);
278 rl_get_next_history (cxt->last_found_line - cxt->save_line, 0);
283 if (cxt->sline_index < 0)
285 if (cxt->last_found_line == cxt->save_line)
286 cxt->sline_index = cxt->save_point;
288 cxt->sline_index = strlen (rl_line_buffer);
289 rl_mark = cxt->save_mark;
292 rl_point = cxt->sline_index;
300 _rl_search_getchar (cxt)
301 _rl_search_cxt *cxt;
307 c = cxt->lastc = rl_read_key ();
312 c = cxt->lastc = _rl_read_mbstring (cxt->lastc, cxt->mb, MB_LEN_MAX);
322 _rl_isearch_dispatch (cxt, c)
323 _rl_search_cxt *cxt;
333 cxt->sflags |= SF_FAILED;
334 cxt->history_pos = cxt->last_found_line;
344 cxt->lastc = (cxt->sflags & SF_REVERSE) ? -1 : -2;
346 cxt->lastc = (cxt->sflags & SF_REVERSE) ? -2 : -1;
348 cxt->lastc = -3;
350 cxt->lastc = -4;
352 cxt->lastc = -5;
354 cxt->lastc = -6;
361 if (strchr (cxt->search_terminators, cxt->lastc))
372 if (cxt->lastc == ESC && _rl_input_available ())
383 if (cxt->lastc >= 0 && (cxt->mb[0] && cxt->mb[1] == '\0') && ENDSRCH_CHAR (cxt->lastc))
387 rl_execute_next (cxt->lastc);
393 if (cxt->lastc >= 0 && ENDSRCH_CHAR (cxt->lastc))
397 rl_execute_next (cxt->lastc);
403 switch (cxt->lastc)
407 if (cxt->search_string_index == 0)
411 cxt->search_string_size = 64 + last_isearch_string_len;
412 cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
413 strcpy (cxt->search_string, last_isearch_string);
414 cxt->search_string_index = last_isearch_string_len;
415 rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), -1);
420 else if (cxt->sflags & SF_REVERSE)
421 cxt->sline_index--;
422 else if (cxt->sline_index != cxt->sline_len)
423 cxt->sline_index++;
430 cxt->direction = -cxt->direction;
431 if (cxt->direction < 0)
432 cxt->sflags |= SF_REVERSE;
434 cxt->sflags &= ~SF_REVERSE;
443 if (cxt->search_string_index == 0)
446 cxt->search_string[--cxt->search_string_index] = '\0';
450 rl_replace_line (cxt->lines[cxt->save_line], 0);
451 rl_point = cxt->save_point;
452 rl_mark = cxt->save_mark;
460 wstart = rl_point + cxt->search_string_index;
483 if (cxt->search_string_index + wlen + 1 >= cxt->search_string_size)
485 cxt->search_string_size += wlen + 1;
486 cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
489 cxt->search_string[cxt->search_string_index++] = rl_line_buffer[wstart];
490 cxt->search_string[cxt->search_string_index] = '\0';
495 wstart = rl_point + cxt->search_string_index;
502 if (cxt->search_string_index + n + 1 >= cxt->search_string_size)
504 cxt->search_string_size += n + 1;
505 cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
508 cxt->search_string[cxt->search_string_index++] = rl_line_buffer[n];
509 cxt->search_string[cxt->search_string_index] = '\0';
514 if (cxt->search_string_index + 2 >= cxt->search_string_size)
516 cxt->search_string_size += 128;
517 cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
523 for (j = 0, l = strlen (cxt->mb); j < l; )
524 cxt->search_string[cxt->search_string_index++] = cxt->mb[j++];
528 cxt->search_string[cxt->search_string_index++] = c;
529 cxt->search_string[cxt->search_string_index] = '\0';
533 for (cxt->sflags &= ~(SF_FOUND|SF_FAILED);; )
535 limit = cxt->sline_len - cxt->search_string_index + 1;
538 while ((cxt->sflags & SF_REVERSE) ? (cxt->sline_index >= 0) : (cxt->sline_index < limit))
540 if (STREQN (cxt->search_string, cxt->sline + cxt->sline_index, cxt->search_string_index))
542 cxt->sflags |= SF_FOUND;
546 cxt->sline_index += cxt->direction;
548 if (cxt->sflags & SF_FOUND)
557 cxt->history_pos += cxt->direction;
560 if ((cxt->sflags & SF_REVERSE) ? (cxt->history_pos < 0) : (cxt->history_pos == cxt->hlen))
562 cxt->sflags |= SF_FAILED;
567 cxt->sline = cxt->lines[cxt->history_pos];
568 cxt->sline_len = strlen (cxt->sline);
570 while ((cxt->prev_line_found && STREQ (cxt->prev_line_found, cxt->lines[cxt->history_pos])) ||
571 (cxt->search_string_index > cxt->sline_len));
573 if (cxt->sflags & SF_FAILED)
577 cxt->sline_index = (cxt->sflags & SF_REVERSE) ? cxt->sline_len - cxt->search_string_index : 0;
580 if (cxt->sflags & SF_FAILED)
584 cxt->history_pos = cxt->last_found_line;
591 if (cxt->sflags & SF_FOUND)
593 cxt->prev_line_found = cxt->lines[cxt->history_pos];
594 rl_replace_line (cxt->lines[cxt->history_pos], 0);
595 rl_point = cxt->sline_index;
596 cxt->last_found_line = cxt->history_pos;
597 rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), (cxt->history_pos == cxt->save_line) ? -1 : cxt->history_pos);
604 _rl_isearch_cleanup (cxt, r)
605 _rl_search_cxt *cxt;
609 _rl_isearch_fini (cxt);
610 _rl_scxt_dispose (cxt, 0);
626 _rl_search_cxt *cxt; /* local for now, but saved globally */
630 cxt = _rl_isearch_init (direction);
632 rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), -1);
642 c = _rl_search_getchar (cxt);
644 r = _rl_isearch_dispatch (cxt, cxt->lastc);
653 return (_rl_isearch_cleanup (cxt, r));
662 _rl_isearch_callback (cxt)
663 _rl_search_cxt *cxt;
667 c = _rl_search_getchar (cxt);
669 r = _rl_isearch_dispatch (cxt, cxt->lastc);
671 return (r <= 0) ? _rl_isearch_cleanup (cxt, r) : 0;