Copyright (C) 1985, 1986, 1987, 1989, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010 Free Software Foundation, Inc.
+ 2009, 2010, 2011 Free Software Foundation, Inc.
This file is part of GNU Emacs.
#include <pwd.h>
#endif
-#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#endif
#ifdef HAVE_SYS_UTSNAME_H
#include <sys/utsname.h>
#endif
static int tm_diff (struct tm *, struct tm *);
-static void find_field (Lisp_Object, Lisp_Object, Lisp_Object, int *, Lisp_Object, int *);
-static void update_buffer_properties (int, int);
+static void find_field (Lisp_Object, Lisp_Object, Lisp_Object,
+ EMACS_INT *, Lisp_Object, EMACS_INT *);
+static void update_buffer_properties (EMACS_INT, EMACS_INT);
static Lisp_Object region_limit (int);
-int lisp_time_argument (Lisp_Object, time_t *, int *);
static size_t emacs_memftimeu (char *, size_t, const char *,
size_t, const struct tm *, int);
static void general_insert_function (void (*) (const unsigned char *, EMACS_INT),
int, int, Lisp_Object *);
static Lisp_Object subst_char_in_region_unwind (Lisp_Object);
static Lisp_Object subst_char_in_region_unwind_1 (Lisp_Object);
-static void transpose_markers (int, int, int, int, int, int, int, int);
+static void transpose_markers (EMACS_INT, EMACS_INT, EMACS_INT, EMACS_INT,
+ EMACS_INT, EMACS_INT, EMACS_INT, EMACS_INT);
-Lisp_Object Vbuffer_access_fontify_functions;
Lisp_Object Qbuffer_access_fontify_functions;
-Lisp_Object Vbuffer_access_fontified_property;
-
Lisp_Object Fuser_full_name (Lisp_Object);
-/* Non-nil means don't stop at field boundary in text motion commands. */
-
-Lisp_Object Vinhibit_field_text_motion;
-
-/* Some static data, and a function to initialize it for each run */
-
-Lisp_Object Vsystem_name;
-Lisp_Object Vuser_real_login_name; /* login name of current user ID */
-Lisp_Object Vuser_full_name; /* full name of current user */
-Lisp_Object Vuser_login_name; /* user name from LOGNAME or USER */
-Lisp_Object Voperating_system_release; /* Operating System Release */
-
/* Symbol for the text property used to mark fields. */
Lisp_Object Qfield;
}
DEFUN ("byte-to-string", Fbyte_to_string, Sbyte_to_string, 1, 1, 0,
- doc: /* Convert arg BYTE to a string containing that byte. */)
+ doc: /* Convert arg BYTE to a unibyte string containing that byte. */)
(Lisp_Object byte)
{
unsigned char b;
CHECK_NUMBER (byte);
+ if (XINT (byte) < 0 || XINT (byte) > 255)
+ error ("Invalid byte");
b = XINT (byte);
return make_string_from_bytes (&b, 1, 1);
}
}
\f
static Lisp_Object
-buildmark (int charpos, int bytepos)
+buildmark (EMACS_INT charpos, EMACS_INT bytepos)
{
register Lisp_Object mark;
mark = Fmake_marker ();
return buildmark (PT, PT_BYTE);
}
-int
-clip_to_bounds (int lower, int num, int upper)
+EMACS_INT
+clip_to_bounds (EMACS_INT lower, EMACS_INT num, EMACS_INT upper)
{
if (num < lower)
return lower;
The return value is POSITION. */)
(register Lisp_Object position)
{
- int pos;
+ EMACS_INT pos;
if (MARKERP (position)
&& current_buffer == XMARKER (position)->buffer)
static Lisp_Object
region_limit (int beginningp)
{
- extern Lisp_Object Vmark_even_if_inactive; /* Defined in callint.c. */
Lisp_Object m;
if (!NILP (Vtransient_mark_mode)
}
DEFUN ("region-beginning", Fregion_beginning, Sregion_beginning, 0, 0, 0,
- doc: /* Return position of beginning of region, as an integer. */)
+ doc: /* Return the integer value of point or mark, whichever is smaller. */)
(void)
{
return region_limit (1);
}
DEFUN ("region-end", Fregion_end, Sregion_end, 0, 0, 0,
- doc: /* Return position of end of region, as an integer. */)
+ doc: /* Return the integer value of point or mark, whichever is larger. */)
(void)
{
return region_limit (0);
of length LEN. */
static int
-overlays_around (int pos, Lisp_Object *vec, int len)
+overlays_around (EMACS_INT pos, Lisp_Object *vec, int len)
{
Lisp_Object overlay, start, end;
struct Lisp_Overlay *tail;
- int startpos, endpos;
+ EMACS_INT startpos, endpos;
int idx = 0;
for (tail = current_buffer->overlays_before; tail; tail = tail->next)
return Fget_text_property (position, prop, object);
else
{
- int posn = XINT (position);
+ EMACS_INT posn = XINT (position);
int noverlays;
Lisp_Object *overlay_vec, tem;
struct buffer *obuf = current_buffer;
is not stored. */
static void
-find_field (Lisp_Object pos, Lisp_Object merge_at_boundary, Lisp_Object beg_limit, int *beg, Lisp_Object end_limit, int *end)
+find_field (Lisp_Object pos, Lisp_Object merge_at_boundary,
+ Lisp_Object beg_limit,
+ EMACS_INT *beg, Lisp_Object end_limit, EMACS_INT *end)
{
/* Fields right before and after the point. */
Lisp_Object before_field, after_field;
If POS is nil, the value of point is used for POS. */)
(Lisp_Object pos)
{
- int beg, end;
+ EMACS_INT beg, end;
find_field (pos, Qnil, Qnil, &beg, Qnil, &end);
if (beg != end)
del_range (beg, end);
If POS is nil, the value of point is used for POS. */)
(Lisp_Object pos)
{
- int beg, end;
+ EMACS_INT beg, end;
find_field (pos, Qnil, Qnil, &beg, Qnil, &end);
return make_buffer_string (beg, end, 1);
}
If POS is nil, the value of point is used for POS. */)
(Lisp_Object pos)
{
- int beg, end;
+ EMACS_INT beg, end;
find_field (pos, Qnil, Qnil, &beg, Qnil, &end);
return make_buffer_string (beg, end, 0);
}
is before LIMIT, then LIMIT will be returned instead. */)
(Lisp_Object pos, Lisp_Object escape_from_edge, Lisp_Object limit)
{
- int beg;
+ EMACS_INT beg;
find_field (pos, escape_from_edge, limit, &beg, Qnil, 0);
return make_number (beg);
}
is after LIMIT, then LIMIT will be returned instead. */)
(Lisp_Object pos, Lisp_Object escape_from_edge, Lisp_Object limit)
{
- int end;
+ EMACS_INT end;
find_field (pos, escape_from_edge, Qnil, 0, limit, &end);
return make_number (end);
}
(Lisp_Object new_pos, Lisp_Object old_pos, Lisp_Object escape_from_edge, Lisp_Object only_in_line, Lisp_Object inhibit_capture_property)
{
/* If non-zero, then the original point, before re-positioning. */
- int orig_point = 0;
+ EMACS_INT orig_point = 0;
int fwd;
Lisp_Object prev_old, prev_new;
With argument N not nil or 1, move forward N - 1 lines first.
If scan reaches end of buffer, return that position.
+The returned position is of the first character in the logical order,
+i.e. the one that has the smallest character position.
+
This function constrains the returned position to the current field
unless that would be on a different line than the original,
unconstrained result. If N is nil or 1, and a front-sticky field
This function does not move point. */)
(Lisp_Object n)
{
- int orig, orig_byte, end;
+ EMACS_INT orig, orig_byte, end;
int count = SPECPDL_INDEX ();
specbind (Qinhibit_point_motion_hooks, Qt);
With argument N not nil or 1, move forward N - 1 lines first.
If scan reaches end of buffer, return that position.
+The returned position is of the last character in the logical order,
+i.e. the character whose buffer position is the largest one.
+
This function constrains the returned position to the current field
unless that would be on a different line than the original,
unconstrained result. If N is nil or 1, and a rear-sticky field ends
This function does not move point. */)
(Lisp_Object n)
{
- int end_pos;
- int orig = PT;
+ EMACS_INT end_pos;
+ EMACS_INT orig = PT;
if (NILP (n))
XSETFASTINT (n, 1);
XSETFASTINT (temp, 0);
else if (!NILP (current_buffer->enable_multibyte_characters))
{
- int pos = PT_BYTE;
+ EMACS_INT pos = PT_BYTE;
DEC_POS (pos);
XSETFASTINT (temp, FETCH_CHAR (pos));
}
If POS is out of range, the value is nil. */)
(Lisp_Object pos)
{
- register int pos_byte;
+ register EMACS_INT pos_byte;
if (NILP (pos))
{
(Lisp_Object pos)
{
register Lisp_Object val;
- register int pos_byte;
+ register EMACS_INT pos_byte;
if (NILP (pos))
{
/* For the benefit of callers who don't want to include lisp.h */
-char *
+const char *
get_system_name (void)
{
if (STRINGP (Vsystem_name))
- return (char *) SDATA (Vsystem_name);
+ return SSDATA (Vsystem_name);
else
return "";
}
-char *
+const char *
get_operating_system_release (void)
{
if (STRINGP (Voperating_system_release))
- return (char *) SDATA (Voperating_system_release);
+ return SSDATA (Voperating_system_release);
else
return "";
}
else
{
char tzbuf[100];
- char *tzstring;
+ const char *tzstring;
char **oldenv = environ, **newenv;
if (EQ (zone, Qt))
tzstring = "UTC0";
else if (STRINGP (zone))
- tzstring = (char *) SDATA (zone);
+ tzstring = SSDATA (zone);
else if (INTEGERP (zone))
{
int abszone = eabs (XINT (zone));
If TZ is t, use Universal Time. */)
(Lisp_Object tz)
{
- char *tzstring;
+ const char *tzstring;
/* When called for the first time, save the original TZ. */
if (!environbuf)
else
{
CHECK_STRING (tz);
- tzstring = (char *) SDATA (tz);
+ tzstring = SSDATA (tz);
}
set_time_zone_rule (tzstring);
(Lisp_Object character, Lisp_Object count, Lisp_Object inherit)
{
register unsigned char *string;
- register int strlen;
- register int i, n;
+ register EMACS_INT strlen;
+ register int i;
+ register EMACS_INT n;
int len;
unsigned char str[MAX_MULTIBYTE_LENGTH];
len = CHAR_STRING (XFASTINT (character), str);
else
str[0] = XFASTINT (character), len = 1;
+ if (MOST_POSITIVE_FIXNUM / len < XINT (count))
+ error ("Maximum buffer size would be exceeded");
n = XINT (count) * len;
if (n <= 0)
return Qnil;
buffer substrings. */
Lisp_Object
-make_buffer_string (int start, int end, int props)
+make_buffer_string (EMACS_INT start, EMACS_INT end, int props)
{
- int start_byte = CHAR_TO_BYTE (start);
- int end_byte = CHAR_TO_BYTE (end);
+ EMACS_INT start_byte = CHAR_TO_BYTE (start);
+ EMACS_INT end_byte = CHAR_TO_BYTE (end);
return make_buffer_string_both (start, start_byte, end, end_byte, props);
}
buffer substrings. */
Lisp_Object
-make_buffer_string_both (int start, int start_byte, int end, int end_byte, int props)
+make_buffer_string_both (EMACS_INT start, EMACS_INT start_byte,
+ EMACS_INT end, EMACS_INT end_byte, int props)
{
Lisp_Object result, tem, tem1;
in the current buffer, if necessary. */
static void
-update_buffer_properties (int start, int end)
+update_buffer_properties (EMACS_INT start, EMACS_INT end)
{
/* If this buffer has some access functions,
call them, specifying the range of the buffer being accessed. */
use `buffer-substring-no-properties' instead. */)
(Lisp_Object start, Lisp_Object end)
{
- register int b, e;
+ register EMACS_INT b, e;
validate_region (&start, &end);
b = XINT (start);
they can be in either order. */)
(Lisp_Object start, Lisp_Object end)
{
- register int b, e;
+ register EMACS_INT b, e;
validate_region (&start, &end);
b = XINT (start);
They default to the values of (point-min) and (point-max) in BUFFER. */)
(Lisp_Object buffer, Lisp_Object start, Lisp_Object end)
{
- register int b, e, temp;
+ register EMACS_INT b, e, temp;
register struct buffer *bp, *obuf;
Lisp_Object buf;
determines whether case is significant or ignored. */)
(Lisp_Object buffer1, Lisp_Object start1, Lisp_Object end1, Lisp_Object buffer2, Lisp_Object start2, Lisp_Object end2)
{
- register int begp1, endp1, begp2, endp2, temp;
+ register EMACS_INT begp1, endp1, begp2, endp2, temp;
register struct buffer *bp1, *bp2;
register Lisp_Object trt
= (!NILP (current_buffer->case_fold_search)
? current_buffer->case_canon_table : Qnil);
- int chars = 0;
- int i1, i2, i1_byte, i2_byte;
+ EMACS_INT chars = 0;
+ EMACS_INT i1, i2, i1_byte, i2_byte;
/* Find the first buffer and its substring. */
Both characters must have the same length of multi-byte form. */)
(Lisp_Object start, Lisp_Object end, Lisp_Object fromchar, Lisp_Object tochar, Lisp_Object noundo)
{
- register int pos, pos_byte, stop, i, len, end_byte;
+ register EMACS_INT pos, pos_byte, stop, i, len, end_byte;
/* Keep track of the first change in the buffer:
if 0 we haven't found it yet.
if < 0 we've found it and we've run the before-change-function.
if > 0 we've actually performed it and the value is its position. */
- int changed = 0;
+ EMACS_INT changed = 0;
unsigned char fromstr[MAX_MULTIBYTE_LENGTH], tostr[MAX_MULTIBYTE_LENGTH];
unsigned char *p;
int count = SPECPDL_INDEX ();
#define COMBINING_AFTER 2
#define COMBINING_BOTH (COMBINING_BEFORE | COMBINING_AFTER)
int maybe_byte_combining = COMBINING_NO;
- int last_changed = 0;
+ EMACS_INT last_changed = 0;
int multibyte_p = !NILP (current_buffer->enable_multibyte_characters);
restart:
stop = min (stop, GPT_BYTE);
while (1)
{
- int pos_byte_next = pos_byte;
+ EMACS_INT pos_byte_next = pos_byte;
if (pos_byte >= stop)
{
}
-static Lisp_Object check_translation (int, int, int, Lisp_Object);
+static Lisp_Object check_translation (EMACS_INT, EMACS_INT, EMACS_INT,
+ Lisp_Object);
/* Helper function for Ftranslate_region_internal.
element is found, return it. Otherwise return Qnil. */
static Lisp_Object
-check_translation (int pos, int pos_byte, int end, Lisp_Object val)
+check_translation (EMACS_INT pos, EMACS_INT pos_byte, EMACS_INT end,
+ Lisp_Object val)
{
int buf_size = 16, buf_used = 0;
int *buf = alloca (sizeof (int) * buf_size);
for (; CONSP (val); val = XCDR (val))
{
Lisp_Object elt;
- int len, i;
+ EMACS_INT len, i;
elt = XCAR (val);
if (! CONSP (elt))
if (buf_used <= i)
{
unsigned char *p = BYTE_POS_ADDR (pos_byte);
- int len;
+ int len1;
if (buf_used == buf_size)
{
memcpy (newbuf, buf, sizeof (int) * buf_used);
buf = newbuf;
}
- buf[buf_used++] = STRING_CHAR_AND_LENGTH (p, len);
- pos_byte += len;
+ buf[buf_used++] = STRING_CHAR_AND_LENGTH (p, len1);
+ pos_byte += len1;
}
if (XINT (AREF (elt, i)) != buf[i])
break;
register unsigned char *tt; /* Trans table. */
register int nc; /* New character. */
int cnt; /* Number of changes made. */
- int size; /* Size of translate table. */
- int pos, pos_byte, end_pos;
+ EMACS_INT size; /* Size of translate table. */
+ EMACS_INT pos, pos_byte, end_pos;
int multibyte = !NILP (current_buffer->enable_multibyte_characters);
int string_multibyte;
Lisp_Object val;
}
else
{
- int c;
+ EMACS_INT c;
nc = oc;
val = CHAR_TABLE_REF (table, oc);
/* The restriction has changed from the saved one, so restore
the saved restriction. */
{
- int pt = BUF_PT (buf);
+ EMACS_INT pt = BUF_PT (buf);
SET_BUF_BEGV_BOTH (buf, beg->charpos, beg->bytepos);
SET_BUF_ZV_BOTH (buf, end->charpos, end->bytepos);
return val;
}
}
-#ifdef HAVE_MENUS
-extern Lisp_Object last_nonmenu_event;
-#endif
DEFUN ("message-or-box", Fmessage_or_box, Smessage_or_box, 1, MANY, 0,
doc: /* Display a message in a dialog box or in the echo area.
(int nargs, register Lisp_Object *args)
{
register int n; /* The number of the next arg to substitute */
- register int total; /* An estimate of the final length */
+ register EMACS_INT total; /* An estimate of the final length */
char *buf, *p;
register unsigned char *format, *end, *format_start;
int nchars;
int multibyte = 0;
/* When we make a multibyte string, we must pay attention to the
byte combining problem, i.e., a byte may be combined with a
- multibyte charcter of the previous string. This flag tells if we
+ multibyte character of the previous string. This flag tells if we
must consider such a situation or not. */
int maybe_combine_byte;
unsigned char *this_format;
while (format != end)
if (*format++ == '%')
{
- int thissize = 0;
- int actual_width = 0;
+ EMACS_INT thissize = 0;
+ EMACS_INT actual_width = 0;
unsigned char *this_format_start = format - 1;
int field_width = 0;
/* handle case (precision[n] >= 0) */
int width, padding;
- int nbytes, start, end;
- int nchars_string;
+ EMACS_INT nbytes, start, end;
+ EMACS_INT nchars_string;
/* lisp_string_width ignores a precision of 0, but GNU
libc functions print 0 characters when the precision
if (precision[n] == 0)
width = nchars_string = nbytes = 0;
else if (precision[n] > 0)
- width = lisp_string_width (args[n], precision[n], &nchars_string, &nbytes);
+ width = lisp_string_width (args[n], precision[n],
+ &nchars_string, &nbytes);
else
{ /* no precision spec given for this argument */
width = lisp_string_width (args[n], -1, NULL, NULL);
if (CONSP (props))
{
- int bytepos = 0, position = 0, translated = 0, argn = 1;
+ EMACS_INT bytepos = 0, position = 0, translated = 0;
+ int argn = 1;
Lisp_Object list;
/* Adjust the bounds of each text property
for (list = props; CONSP (list); list = XCDR (list))
{
Lisp_Object item;
- int pos;
+ EMACS_INT pos;
item = XCAR (list);
It's the caller's job to ensure that START1 <= END1 <= START2 <= END2. */
static void
-transpose_markers (int start1, int end1, int start2, int end2,
- int start1_byte, int end1_byte,
- int start2_byte, int end2_byte)
+transpose_markers (EMACS_INT start1, EMACS_INT end1,
+ EMACS_INT start2, EMACS_INT end2,
+ EMACS_INT start1_byte, EMACS_INT end1_byte,
+ EMACS_INT start2_byte, EMACS_INT end2_byte)
{
- register int amt1, amt1_byte, amt2, amt2_byte, diff, diff_byte, mpos;
+ register EMACS_INT amt1, amt1_byte, amt2, amt2_byte, diff, diff_byte, mpos;
register struct Lisp_Marker *marker;
/* Update point as if it were a marker. */
/* Swap the regions if they're reversed. */
if (start2 < end1)
{
- register int glumph = start1;
+ register EMACS_INT glumph = start1;
start1 = start2;
start2 = glumph;
glumph = end1;
= intern_c_string ("buffer-access-fontify-functions");
staticpro (&Qbuffer_access_fontify_functions);
- DEFVAR_LISP ("inhibit-field-text-motion", &Vinhibit_field_text_motion,
+ DEFVAR_LISP ("inhibit-field-text-motion", Vinhibit_field_text_motion,
doc: /* Non-nil means text motion commands don't notice fields. */);
Vinhibit_field_text_motion = Qnil;
DEFVAR_LISP ("buffer-access-fontify-functions",
- &Vbuffer_access_fontify_functions,
+ Vbuffer_access_fontify_functions,
doc: /* List of functions called by `buffer-substring' to fontify if necessary.
Each function is called with two arguments which specify the range
of the buffer being accessed. */);
{
Lisp_Object obuf;
- extern Lisp_Object Vprin1_to_string_buffer;
obuf = Fcurrent_buffer ();
/* Do this here, because init_buffer_once is too early--it won't work. */
Fset_buffer (Vprin1_to_string_buffer);
}
DEFVAR_LISP ("buffer-access-fontified-property",
- &Vbuffer_access_fontified_property,
+ Vbuffer_access_fontified_property,
doc: /* Property which (if non-nil) indicates text has been fontified.
`buffer-substring' need not call the `buffer-access-fontify-functions'
functions if all the text being accessed has this property. */);
Vbuffer_access_fontified_property = Qnil;
- DEFVAR_LISP ("system-name", &Vsystem_name,
+ DEFVAR_LISP ("system-name", Vsystem_name,
doc: /* The host name of the machine Emacs is running on. */);
- DEFVAR_LISP ("user-full-name", &Vuser_full_name,
+ DEFVAR_LISP ("user-full-name", Vuser_full_name,
doc: /* The full name of the user logged in. */);
- DEFVAR_LISP ("user-login-name", &Vuser_login_name,
+ DEFVAR_LISP ("user-login-name", Vuser_login_name,
doc: /* The user's name, taken from environment variables if possible. */);
- DEFVAR_LISP ("user-real-login-name", &Vuser_real_login_name,
+ DEFVAR_LISP ("user-real-login-name", Vuser_real_login_name,
doc: /* The user's name, based upon the real uid only. */);
- DEFVAR_LISP ("operating-system-release", &Voperating_system_release,
+ DEFVAR_LISP ("operating-system-release", Voperating_system_release,
doc: /* The release of the operating system Emacs is running on. */);
defsubr (&Spropertize);
defsubr (&Ssave_restriction);
defsubr (&Stranspose_regions);
}
-
-/* arch-tag: fc3827d8-6f60-4067-b11e-c3218031b018
- (do not change this comment) */