comparison src/search.c @ 793:e38acbeb1cae

[xemacs-hg @ 2002-03-29 04:46:17 by ben] lots o' fixes etc/ChangeLog: New file. Separated out all entries for etc/ into their own ChangeLog. Includes entries for the following files: etc/BABYL, etc/BETA, etc/CHARSETS, etc/DISTRIB, etc/Emacs.ad, etc/FTP, etc/GNUS-NEWS, etc/GOATS, etc/HELLO, etc/INSTALL, etc/MACHINES, etc/MAILINGLISTS, etc/MSDOS, etc/MYTHOLOGY, etc/NEWS, etc/OXYMORONS, etc/PACKAGES, etc/README, etc/TUTORIAL, etc/TUTORIAL.de, etc/TUTORIAL.ja, etc/TUTORIAL.ko, etc/TUTORIAL.se, etc/aliases.ksh, etc/altrasoft-logo.xpm, etc/check_cygwin_setup.sh, etc/custom/example-themes/europe-theme.el, etc/custom/example-themes/ex-custom-file, etc/custom/example-themes/example-theme.el, etc/e/eterm.ti, etc/edt-user.doc, etc/enriched.doc, etc/etags.1, etc/gnuserv.1, etc/gnuserv.README, etc/package-index.LATEST.gpg, etc/package-index.LATEST.pgp, etc/photos/jan.png, etc/recycle.xpm, etc/refcard.tex, etc/sample.Xdefaults, etc/sample.emacs, etc/sgml/CATALOG, etc/sgml/HTML32.dtd, etc/skk/SKK.tut.E, etc/smilies/Face_ase.xbm, etc/smilies/Face_ase2.xbm, etc/smilies/Face_ase3.xbm, etc/smilies/Face_smile.xbm, etc/smilies/Face_weep.xbm, etc/sounds, etc/toolbar, etc/toolbar/workshop-cap-up.xpm, etc/xemacs-ja.1, etc/xemacs.1, etc/yow.lines, etc\BETA, etc\NEWS, etc\README, etc\TUTORIAL, etc\TUTORIAL.de, etc\check_cygwin_setup.sh, etc\sample.init.el, etc\unicode\README, etc\unicode\mule-ucs\*, etc\unicode\other\* unicode/unicode-consortium/8859-16.TXT: New file. mule/english.el: Define this charset now, since a bug was fixed that formerly prevented it. mule/ethio-util.el: Fix compile errors involving Unicode `characters', which should be integers. Makefile.in.in: Always include gui.c, to fix compile error when TTY-only. EmacsFrame.c, abbrev.c, alloc.c, buffer.c, buffer.h, bytecode.c, bytecode.h, callint.c, callproc.c, casetab.c, casetab.h, charset.h, chartab.c, chartab.h, cmds.c, console-msw.c, console-msw.h, console-tty.c, console-x.c, console-x.h, console.c, console.h, data.c, database.c, device-gtk.c, device-msw.c, device-x.c, device.c, device.h, dialog-msw.c, doc.c, doprnt.c, dumper.c, dynarr.c, editfns.c, eldap.c, eldap.h, elhash.c, elhash.h, emacs.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, event-unixoid.c, events.c, events.h, extents.c, extents.h, faces.c, faces.h, file-coding.c, file-coding.h, fileio.c, filelock.c, fns.c, frame-gtk.c, frame-msw.c, frame-tty.c, frame-x.c, frame.c, frame.h, free-hook.c, general-slots.h, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-widget.c, glyphs-x.c, glyphs.c, glyphs.h, gpmevent.c, gtk-xemacs.c, gui-msw.c, gui-x.c, gui-x.h, gui.c, gui.h, gutter.c, gutter.h, indent.c, input-method-xlib.c, insdel.c, keymap.c, keymap.h, lisp-disunion.h, lisp-union.h, lisp.h, lread.c, lrecord.h, lstream.c, lstream.h, marker.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, menubar.c, minibuf.c, mule-canna.c, mule-ccl.c, mule-charset.c, mule-wnnfns.c, native-gtk-toolbar.c, objects-msw.c, objects-tty.c, objects-x.c, objects.c, objects.h, opaque.c, opaque.h, postgresql.c, postgresql.h, print.c, process-unix.c, process.c, process.h, rangetab.c, rangetab.h, redisplay-gtk.c, redisplay-msw.c, redisplay-output.c, redisplay-tty.c, redisplay-x.c, redisplay.c, scrollbar-gtk.c, scrollbar-msw.c, scrollbar-x.c, scrollbar.c, scrollbar.h, search.c, select-gtk.c, select-x.c, sound.c, specifier.c, specifier.h, strftime.c, symbols.c, symeval.h, syntax.h, text.c, text.h, toolbar-common.c, toolbar-msw.c, toolbar.c, toolbar.h, tooltalk.c, tooltalk.h, ui-gtk.c, ui-gtk.h, undo.c, vm-limit.c, window.c, window.h: Eliminate XSETFOO. Replace all usages with wrap_foo(). Make symbol->name a Lisp_Object, not Lisp_String *. Eliminate nearly all uses of Lisp_String * in favor of Lisp_Object, and correct macros so most of them favor Lisp_Object. Create new error-behavior ERROR_ME_DEBUG_WARN -- output warnings, but at level `debug' (usually ignored). Use it when instantiating specifiers, so problems can be debugged. Move log-warning-minimum-level into C so that we can optimize ERROR_ME_DEBUG_WARN. Fix warning levels consistent with new definitions. Add default_ and parent fields to char table; not yet implemented. New fun Dynarr_verify(); use for further error checking on Dynarrs. Rearrange code at top of lisp.h in conjunction with dynarr changes. Fix eifree(). Use Eistrings in various places (format_event_object(), where_is_to_char(), and callers thereof) to avoid fixed-size strings buffers. New fun write_eistring(). Reindent and fix GPM code to follow standards. Set default MS Windows font to Lucida Console (same size as Courier New but less interline spacing, so more lines fit). Increase default frame size on Windows to 50 lines. (If that's too big for the workspace, the frame will be shrunk as necessary.) Fix problem with text files with no newlines (). (Change `convert-eol' coding system to use `nil' for autodetect, consistent with make-coding-system.) Correct compile warnings in vm-limit.c. Fix handling of reverse-direction charsets to avoid errors when opening (e.g.) mule-ucs/lisp/reldata/uiso8859-6.el. Recode some object printing methods to use write_fmt_string() instead of a fixed buffer and sprintf. Turn on display of png comments as warnings (level `info'), now that they're unobtrusive. Revamped the sound documentation. Fixed bug in redisplay w.r.t. hscroll/truncation/continuation glyphs causing jumping up and down of the lines, since they're bigger than the line size. (It was seen most obviously when there's a horizontal scroll bar, e.g. do C-h a glyph or something like that.) The problem was that the glyph-contrib-p setting on glyphs was ignored even if it was set properly, which it wasn't until now.
author ben
date Fri, 29 Mar 2002 04:49:13 +0000
parents 943eaba38521
children a634e3b7acc8
comparison
equal deleted inserted replaced
792:4e83fdb13eb9 793:e38acbeb1cae
1 /* String search routines for XEmacs. 1 /* String search routines for XEmacs.
2 Copyright (C) 1985, 1986, 1987, 1992-1995 Free Software Foundation, Inc. 2 Copyright (C) 1985, 1986, 1987, 1992-1995 Free Software Foundation, Inc.
3 Copyright (C) 1995 Sun Microsystems, Inc. 3 Copyright (C) 1995 Sun Microsystems, Inc.
4 Copyright (C) 2001 Ben Wing. 4 Copyright (C) 2001, 2002 Ben Wing.
5 5
6 This file is part of XEmacs. 6 This file is part of XEmacs.
7 7
8 XEmacs is free software; you can redistribute it and/or modify it 8 XEmacs is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the 9 under the terms of the GNU General Public License as published by the
312 for (i = 0; i < num_regs; i++) 312 for (i = 0; i < num_regs; i++)
313 { 313 {
314 if (search_regs.start[i] > 0) 314 if (search_regs.start[i] > 0)
315 { 315 {
316 search_regs.start[i] = 316 search_regs.start[i] =
317 XSTRING_INDEX_BYTE_TO_CHAR (string, search_regs.start[i]); 317 string_index_byte_to_char (string, search_regs.start[i]);
318 } 318 }
319 if (search_regs.end[i] > 0) 319 if (search_regs.end[i] > 0)
320 { 320 {
321 search_regs.end[i] = 321 search_regs.end[i] =
322 XSTRING_INDEX_BYTE_TO_CHAR (string, search_regs.end[i]); 322 string_index_byte_to_char (string, search_regs.end[i]);
323 } 323 }
324 } 324 }
325 } 325 }
326 326
327 327
375 { 375 {
376 search_regs.start[i] += BI_BUF_BEGV (buf); 376 search_regs.start[i] += BI_BUF_BEGV (buf);
377 search_regs.end[i] += BI_BUF_BEGV (buf); 377 search_regs.end[i] += BI_BUF_BEGV (buf);
378 } 378 }
379 } 379 }
380 XSETBUFFER (last_thing_searched, buf); 380 last_thing_searched = wrap_buffer (buf);
381 fixup_search_regs_for_buffer (buf); 381 fixup_search_regs_for_buffer (buf);
382 return unbind_to_1 (count, val); 382 return unbind_to_1 (count, val);
383 } 383 }
384 384
385 DEFUN ("looking-at", Flooking_at, 1, 2, 0, /* 385 DEFUN ("looking-at", Flooking_at, 1, 2, 0, /*
444 (!NILP (buf->case_fold_search) 444 (!NILP (buf->case_fold_search)
445 ? XCASE_TABLE_DOWNCASE (buf->case_table) : Qnil), 445 ? XCASE_TABLE_DOWNCASE (buf->case_table) : Qnil),
446 0, ERROR_ME); 446 0, ERROR_ME);
447 QUIT; 447 QUIT;
448 { 448 {
449 Bytecount bis = XSTRING_INDEX_CHAR_TO_BYTE (string, s); 449 Bytecount bis = string_index_char_to_byte (string, s);
450 regex_match_object = string; 450 regex_match_object = string;
451 regex_emacs_buffer = buf; 451 regex_emacs_buffer = buf;
452 val = re_search (bufp, (char *) XSTRING_DATA (string), 452 val = re_search (bufp, (char *) XSTRING_DATA (string),
453 XSTRING_LENGTH (string), bis, 453 XSTRING_LENGTH (string), bis,
454 XSTRING_LENGTH (string) - bis, 454 XSTRING_LENGTH (string) - bis,
459 if (val < 0) return unbind_to (count); 459 if (val < 0) return unbind_to (count);
460 last_thing_searched = Qt; 460 last_thing_searched = Qt;
461 fixup_search_regs_for_string (string); 461 fixup_search_regs_for_string (string);
462 return 462 return
463 unbind_to_1 (count, 463 unbind_to_1 (count,
464 make_int (XSTRING_INDEX_BYTE_TO_CHAR (string, val))); 464 make_int (string_index_byte_to_char (string, val)));
465 } 465 }
466 466
467 DEFUN ("string-match", Fstring_match, 2, 4, 0, /* 467 DEFUN ("string-match", Fstring_match, 2, 4, 0, /*
468 Return index of start of first match for REGEXP in STRING, or nil. 468 Return index of start of first match for REGEXP in STRING, or nil.
469 If third arg START is non-nil, start search at that index in STRING. 469 If third arg START is non-nil, start search at that index in STRING.
752 { 752 {
753 return scan_buffer (buf, '\n', from, 0, count, 0, 1); 753 return scan_buffer (buf, '\n', from, 0, count, 0, 1);
754 } 754 }
755 755
756 Bytebpos 756 Bytebpos
757 bi_find_next_emchar_in_string (Lisp_String* str, Emchar target, Bytebpos st, 757 bi_find_next_emchar_in_string (Lisp_Object str, Emchar target, Bytebpos st,
758 EMACS_INT count) 758 EMACS_INT count)
759 { 759 {
760 /* This function has been Mule-ized. */ 760 /* This function has been Mule-ized. */
761 Bytebpos lim = string_length (str) -1; 761 Bytebpos lim = XSTRING_LENGTH (str) -1;
762 Intbyte* s = string_data (str); 762 Intbyte *s = XSTRING_DATA (str);
763 763
764 assert (count >= 0); 764 assert (count >= 0);
765 765
766 #ifdef MULE 766 #ifdef MULE
767 /* Due to the Mule representation of characters in a buffer, 767 /* Due to the Mule representation of characters in a buffer,
771 way is faster. */ 771 way is faster. */
772 if (target >= 0200) 772 if (target >= 0200)
773 { 773 {
774 while (st < lim && count > 0) 774 while (st < lim && count > 0)
775 { 775 {
776 if (string_char (str, st) == target) 776 if (XSTRING_CHAR (str, st) == target)
777 count--; 777 count--;
778 INC_CHARBYTEBPOS (s, st); 778 INC_CHARBYTEBPOS (s, st);
779 } 779 }
780 } 780 }
781 else 781 else
1237 if (search_regs.start[i] >= 0) 1237 if (search_regs.start[i] >= 0)
1238 { 1238 {
1239 search_regs.start[i] += j; 1239 search_regs.start[i] += j;
1240 search_regs.end[i] += j; 1240 search_regs.end[i] += j;
1241 } 1241 }
1242 XSETBUFFER (last_thing_searched, buf); 1242 last_thing_searched = wrap_buffer (buf);
1243 /* Set pos to the new position. */ 1243 /* Set pos to the new position. */
1244 pos = search_regs.start[0]; 1244 pos = search_regs.start[0];
1245 fixup_search_regs_for_buffer (buf); 1245 fixup_search_regs_for_buffer (buf);
1246 /* And charbpos too. */ 1246 /* And charbpos too. */
1247 charbpos = search_regs.start[0]; 1247 charbpos = search_regs.start[0];
1275 if (search_regs.start[i] >= 0) 1275 if (search_regs.start[i] >= 0)
1276 { 1276 {
1277 search_regs.start[i] += j; 1277 search_regs.start[i] += j;
1278 search_regs.end[i] += j; 1278 search_regs.end[i] += j;
1279 } 1279 }
1280 XSETBUFFER (last_thing_searched, buf); 1280 last_thing_searched = wrap_buffer (buf);
1281 /* Set pos to the new position. */ 1281 /* Set pos to the new position. */
1282 pos = search_regs.end[0]; 1282 pos = search_regs.end[0];
1283 fixup_search_regs_for_buffer (buf); 1283 fixup_search_regs_for_buffer (buf);
1284 /* And charbpos too. */ 1284 /* And charbpos too. */
1285 charbpos = search_regs.end[0]; 1285 charbpos = search_regs.end[0];
1964 search_regs.num_regs = 1; 1964 search_regs.num_regs = 1;
1965 } 1965 }
1966 1966
1967 search_regs.start[0] = beg; 1967 search_regs.start[0] = beg;
1968 search_regs.end[0] = beg + len; 1968 search_regs.end[0] = beg + len;
1969 XSETBUFFER (last_thing_searched, buf); 1969 last_thing_searched = wrap_buffer (buf);
1970 } 1970 }
1971 1971
1972 1972
1973 /* Given a string of words separated by word delimiters, 1973 /* Given a string of words separated by word delimiters,
1974 compute a regexp that matches those exact words 1974 compute a regexp that matches those exact words
1984 1984
1985 CHECK_STRING (string); 1985 CHECK_STRING (string);
1986 len = XSTRING_CHAR_LENGTH (string); 1986 len = XSTRING_CHAR_LENGTH (string);
1987 1987
1988 for (i = 0; i < len; i++) 1988 for (i = 0; i < len; i++)
1989 if (!WORD_SYNTAX_P (syntax_table, string_char (XSTRING (string), i))) 1989 if (!WORD_SYNTAX_P (syntax_table, XSTRING_CHAR (string, i)))
1990 { 1990 {
1991 punct_count++; 1991 punct_count++;
1992 if (i > 0 && WORD_SYNTAX_P (syntax_table, 1992 if (i > 0 && WORD_SYNTAX_P (syntax_table,
1993 string_char (XSTRING (string), i - 1))) 1993 XSTRING_CHAR (string, i - 1)))
1994 word_count++; 1994 word_count++;
1995 } 1995 }
1996 if (WORD_SYNTAX_P (syntax_table, string_char (XSTRING (string), len - 1))) 1996 if (WORD_SYNTAX_P (syntax_table, XSTRING_CHAR (string, len - 1)))
1997 word_count++; 1997 word_count++;
1998 if (!word_count) return build_string (""); 1998 if (!word_count) return build_string ("");
1999 1999
2000 { 2000 {
2001 /* The following value is an upper bound on the amount of storage we 2001 /* The following value is an upper bound on the amount of storage we
2008 *o++ = '\\'; 2008 *o++ = '\\';
2009 *o++ = 'b'; 2009 *o++ = 'b';
2010 2010
2011 for (i = 0; i < len; i++) 2011 for (i = 0; i < len; i++)
2012 { 2012 {
2013 Emchar ch = string_char (XSTRING (string), i); 2013 Emchar ch = XSTRING_CHAR (string, i);
2014 2014
2015 if (WORD_SYNTAX_P (syntax_table, ch)) 2015 if (WORD_SYNTAX_P (syntax_table, ch))
2016 o += set_charptr_emchar (o, ch); 2016 o += set_charptr_emchar (o, ch);
2017 else if (i > 0 2017 else if (i > 0
2018 && WORD_SYNTAX_P (syntax_table, 2018 && WORD_SYNTAX_P (syntax_table,
2019 string_char (XSTRING (string), i - 1)) 2019 XSTRING_CHAR (string, i - 1))
2020 && --word_count) 2020 && --word_count)
2021 { 2021 {
2022 *o++ = '\\'; 2022 *o++ = '\\';
2023 *o++ = 'W'; 2023 *o++ = 'W';
2024 *o++ = '\\'; 2024 *o++ = '\\';
2330 of the typical half-assed "let the implementation be 2330 of the typical half-assed "let the implementation be
2331 visible" form it's in, we could extend it to include 2331 visible" form it's in, we could extend it to include
2332 the last string matched and the buffer used for that 2332 the last string matched and the buffer used for that
2333 matching. But of course we can't change it as it is. */ 2333 matching. But of course we can't change it as it is. */
2334 buf = decode_buffer (strbuffer, 0); 2334 buf = decode_buffer (strbuffer, 0);
2335 XSETBUFFER (buffer, buf); 2335 buffer = wrap_buffer (buf);
2336 } 2336 }
2337 else 2337 else
2338 { 2338 {
2339 if (!NILP (strbuffer)) 2339 if (!NILP (strbuffer))
2340 { 2340 {
2392 for (pos = search_regs.start[sub]; pos < last; pos++) 2392 for (pos = search_regs.start[sub]; pos < last; pos++)
2393 { 2393 {
2394 if (NILP (string)) 2394 if (NILP (string))
2395 c = BUF_FETCH_CHAR (buf, pos); 2395 c = BUF_FETCH_CHAR (buf, pos);
2396 else 2396 else
2397 c = string_char (XSTRING (string), pos); 2397 c = XSTRING_CHAR (string, pos);
2398 2398
2399 if (LOWERCASEP (buf, c)) 2399 if (LOWERCASEP (buf, c))
2400 { 2400 {
2401 /* Cannot be all caps if any original char is lower case */ 2401 /* Cannot be all caps if any original char is lower case */
2402 2402
2477 /* If SUBSTART is set, we need to also insert the 2477 /* If SUBSTART is set, we need to also insert the
2478 text from SUBSTART to SUBEND in the original string. */ 2478 text from SUBSTART to SUBEND in the original string. */
2479 Charcount substart = -1; 2479 Charcount substart = -1;
2480 Charcount subend = -1; 2480 Charcount subend = -1;
2481 2481
2482 c = string_char (XSTRING (replacement), strpos); 2482 c = XSTRING_CHAR (replacement, strpos);
2483 if (c == '\\' && strpos < stlen - 1) 2483 if (c == '\\' && strpos < stlen - 1)
2484 { 2484 {
2485 c = string_char (XSTRING (replacement), ++strpos); 2485 c = XSTRING_CHAR (replacement, ++strpos);
2486 if (c == '&') 2486 if (c == '&')
2487 { 2487 {
2488 literal_end = strpos - 1; 2488 literal_end = strpos - 1;
2489 substart = search_regs.start[0]; 2489 substart = search_regs.start[0];
2490 subend = search_regs.end[0]; 2490 subend = search_regs.end[0];
2570 Charcount stlen = XSTRING_CHAR_LENGTH (replacement); 2570 Charcount stlen = XSTRING_CHAR_LENGTH (replacement);
2571 Charcount strpos; 2571 Charcount strpos;
2572 2572
2573 for (strpos = 0; strpos < stlen; strpos++) 2573 for (strpos = 0; strpos < stlen; strpos++)
2574 { 2574 {
2575 Emchar curchar = string_char (XSTRING (replacement), strpos); 2575 Emchar curchar = XSTRING_CHAR (replacement, strpos);
2576 Emchar newchar = -1; 2576 Emchar newchar = -1;
2577 if (i < Dynarr_length (ul_pos_dynarr) && 2577 if (i < Dynarr_length (ul_pos_dynarr) &&
2578 strpos == Dynarr_at (ul_pos_dynarr, i)) 2578 strpos == Dynarr_at (ul_pos_dynarr, i))
2579 { 2579 {
2580 int new_action = Dynarr_at (ul_action_dynarr, i); 2580 int new_action = Dynarr_at (ul_action_dynarr, i);
2594 newchar = DOWNCASE (buf, curchar); 2594 newchar = DOWNCASE (buf, curchar);
2595 else 2595 else
2596 newchar = curchar; 2596 newchar = curchar;
2597 } 2597 }
2598 if (newchar != curchar) 2598 if (newchar != curchar)
2599 set_string_char (XSTRING (replacement), strpos, newchar); 2599 set_string_char (replacement, strpos, newchar);
2600 } 2600 }
2601 } 2601 }
2602 2602
2603 /* frees the Dynarrs if necessary. */ 2603 /* frees the Dynarrs if necessary. */
2604 unbind_to (speccount); 2604 unbind_to (speccount);
2631 exactly complementing BUF_SET_PT() above. 2631 exactly complementing BUF_SET_PT() above.
2632 During the loop, it keeps track of the amount inserted. 2632 During the loop, it keeps track of the amount inserted.
2633 */ 2633 */
2634 Charcount offset = BUF_PT (buf) - search_regs.start[sub]; 2634 Charcount offset = BUF_PT (buf) - search_regs.start[sub];
2635 2635
2636 c = string_char (XSTRING (replacement), strpos); 2636 c = XSTRING_CHAR (replacement, strpos);
2637 if (c == '\\' && strpos < stlen - 1) 2637 if (c == '\\' && strpos < stlen - 1)
2638 { 2638 {
2639 /* XXX FIXME: replacing just a substring non-literally 2639 /* XXX FIXME: replacing just a substring non-literally
2640 using backslash refs to the match looks dangerous. But 2640 using backslash refs to the match looks dangerous. But
2641 <15366.18513.698042.156573@ns.caldera.de> from Torsten Duwe 2641 <15366.18513.698042.156573@ns.caldera.de> from Torsten Duwe
2642 <duwe@caldera.de> claims Finsert_buffer_substring already 2642 <duwe@caldera.de> claims Finsert_buffer_substring already
2643 handles this correctly. 2643 handles this correctly.
2644 */ 2644 */
2645 c = string_char (XSTRING (replacement), ++strpos); 2645 c = XSTRING_CHAR (replacement, ++strpos);
2646 if (c == '&') 2646 if (c == '&')
2647 Finsert_buffer_substring 2647 Finsert_buffer_substring
2648 (buffer, 2648 (buffer,
2649 make_int (search_regs.start[0] + offset), 2649 make_int (search_regs.start[0] + offset),
2650 make_int (search_regs.end[0] + offset)); 2650 make_int (search_regs.end[0] + offset));
2913 if (MARKERP (marker)) 2913 if (MARKERP (marker))
2914 { 2914 {
2915 if (XMARKER (marker)->buffer == 0) 2915 if (XMARKER (marker)->buffer == 0)
2916 marker = Qzero; 2916 marker = Qzero;
2917 else 2917 else
2918 XSETBUFFER (last_thing_searched, XMARKER (marker)->buffer); 2918 last_thing_searched = wrap_buffer (XMARKER (marker)->buffer);
2919 } 2919 }
2920 2920
2921 CHECK_INT_COERCE_MARKER (marker); 2921 CHECK_INT_COERCE_MARKER (marker);
2922 search_regs.start[i] = XINT (marker); 2922 search_regs.start[i] = XINT (marker);
2923 list = Fcdr (list); 2923 list = Fcdr (list);