#include <config.h>
+#ifdef STDC_HEADERS
+#include <stdlib.h>
+#endif
#include "lisp.h"
#include "syntax.h"
#include "category.h"
#include <sys/types.h>
#include "regex.h"
+#define min(a, b) ((a) < (b) ? (a) : (b))
+#define max(a, b) ((a) > (b) ? (a) : (b))
+
#define REGEXP_CACHE_SIZE 20
/* If the regexp is non-nil, then the buffer contains the compiled form
}
cp->regexp = Qnil;
- cp->buf.translate = (! NILP (translate) ? translate : 0);
+ cp->buf.translate = (! NILP (translate) ? translate : make_number (0));
cp->posix = posix;
cp->buf.multibyte = multibyte;
BLOCK_INPUT;
cp = *cpp;
if (XSTRING (cp->regexp)->size == XSTRING (pattern)->size
&& !NILP (Fstring_equal (cp->regexp, pattern))
- && cp->buf.translate == (! NILP (translate) ? translate : 0)
+ && EQ (cp->buf.translate, (! NILP (translate) ? translate : make_number (0)))
&& cp->posix == posix
&& cp->buf.multibyte == multibyte)
break;
return val;
}
\f
-/* max and min. */
-
-static int
-max (a, b)
- int a, b;
-{
- return ((a > b) ? a : b);
-}
-
-static int
-min (a, b)
- int a, b;
-{
- return ((a < b) ? a : b);
-}
-
-\f
/* The newline cache: remembering which sections of text have no newlines. */
/* If the user has requested newline caching, make sure it's on.
If ALLOW_QUIT is non-zero, set immediate_quit. That's good to do
except when inside redisplay. */
+int
scan_buffer (target, start, end, count, shortage, allow_quit)
register int target;
int start, end;
examine. */
int ceiling_byte = CHAR_TO_BYTE (end) - 1;
int start_byte = CHAR_TO_BYTE (start);
+ int tem;
/* If we're looking for a newline, consult the newline cache
to see where we can avoid some scanning. */
bytes. BUFFER_CEILING_OF returns the last character
position that is contiguous, so the ceiling is the
position after that. */
- ceiling_byte = min (BUFFER_CEILING_OF (start_byte), ceiling_byte);
+ tem = BUFFER_CEILING_OF (start_byte);
+ ceiling_byte = min (tem, ceiling_byte);
{
/* The termination address of the dumb loop. */
/* The last character to check before the next obstacle. */
int ceiling_byte = CHAR_TO_BYTE (end);
int start_byte = CHAR_TO_BYTE (start);
+ int tem;
/* Consult the newline cache, if appropriate. */
if (target == '\n' && newline_cache)
}
/* Stop scanning before the gap. */
- ceiling_byte = max (BUFFER_FLOOR_OF (start_byte - 1), ceiling_byte);
+ tem = BUFFER_FLOOR_OF (start_byte - 1);
+ ceiling_byte = max (tem, ceiling_byte);
{
/* The termination address of the dumb loop. */
QUIT;
pat = base_pat;
limit = pos_byte - dirlen + direction;
- limit = ((direction > 0)
- ? BUFFER_CEILING_OF (limit)
- : BUFFER_FLOOR_OF (limit));
- /* LIMIT is now the last (not beyond-last!) value POS_BYTE
- can take on without hitting edge of buffer or the gap. */
- limit = ((direction > 0)
- ? min (lim_byte - 1, min (limit, pos_byte + 20000))
- : max (lim_byte, max (limit, pos_byte - 20000)));
+ if (direction > 0)
+ {
+ limit = BUFFER_CEILING_OF (limit);
+ /* LIMIT is now the last (not beyond-last!) value POS_BYTE
+ can take on without hitting edge of buffer or the gap. */
+ limit = min (limit, pos_byte + 20000);
+ limit = min (limit, lim_byte - 1);
+ }
+ else
+ {
+ limit = BUFFER_FLOOR_OF (limit);
+ /* LIMIT is now the last (not beyond-last!) value POS_BYTE
+ can take on without hitting edge of buffer or the gap. */
+ limit = max (limit, pos_byte - 20000);
+ limit = max (limit, lim_byte);
+ }
tail_end = BUFFER_CEILING_OF (pos_byte) + 1;
tail_end_ptr = BYTE_POS_ADDR (tail_end);
*out++ = *in;
}
- return make_multibyte_string (temp,
+ return make_specified_string (temp,
XSTRING (string)->size + backslashes_added,
- out - temp);
+ out - temp,
+ STRING_MULTIBYTE (string));
}
\f
+void
syms_of_search ()
{
register int i;