/* Generic frame functions.
- Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 1997, 1999-2011 Free Software Foundation, Inc.
This file is part of GNU Emacs.
#include <stdio.h>
#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
#include <setjmp.h>
#include "lisp.h"
#include "character.h"
if (NILP (mini_window))
{
/* Use default-minibuffer-frame if possible. */
- if (!FRAMEP (kb->Vdefault_minibuffer_frame)
- || ! FRAME_LIVE_P (XFRAME (kb->Vdefault_minibuffer_frame)))
+ if (!FRAMEP (KVAR (kb, Vdefault_minibuffer_frame))
+ || ! FRAME_LIVE_P (XFRAME (KVAR (kb, Vdefault_minibuffer_frame))))
{
Lisp_Object frame_dummy;
XSETFRAME (frame_dummy, f);
GCPRO1 (frame_dummy);
/* If there's no minibuffer frame to use, create one. */
- kb->Vdefault_minibuffer_frame =
+ KVAR (kb, Vdefault_minibuffer_frame) =
call1 (intern ("make-initial-minibuffer-frame"), display);
UNGCPRO;
}
- mini_window = XFRAME (kb->Vdefault_minibuffer_frame)->minibuffer_window;
+ mini_window = XFRAME (KVAR (kb, Vdefault_minibuffer_frame))->minibuffer_window;
}
f->minibuffer_window = mini_window;
if (!NILP (tty))
{
name = (char *) alloca (SBYTES (tty) + 1);
- strncpy (name, SDATA (tty), SBYTES (tty));
+ strncpy (name, SSDATA (tty), SBYTES (tty));
name[SBYTES (tty)] = 0;
}
if (!NILP (tty_type))
{
type = (char *) alloca (SBYTES (tty_type) + 1);
- strncpy (type, SDATA (tty_type), SBYTES (tty_type));
+ strncpy (type, SSDATA (tty_type), SBYTES (tty_type));
type[SBYTES (tty_type)] = 0;
}
(Lisp_Object event)
{
/* Preserve prefix arg that the command loop just cleared. */
- current_kboard->Vprefix_arg = Vcurrent_prefix_arg;
- call1 (Vrun_hooks, Qmouse_leave_buffer_hook);
+ KVAR (current_kboard, Vprefix_arg) = Vcurrent_prefix_arg;
+ Frun_hooks (1, &Qmouse_leave_buffer_hook);
return do_switch_frame (event, 0, 0, Qnil);
}
/* If we've deleted this keyboard's default_minibuffer_frame, try to
find another one. Prefer minibuffer-only frames, but also notice
frames with other windows. */
- if (kb != NULL && EQ (frame, kb->Vdefault_minibuffer_frame))
+ if (kb != NULL && EQ (frame, KVAR (kb, Vdefault_minibuffer_frame)))
{
Lisp_Object frames;
if (NILP (frame_with_minibuf))
abort ();
- kb->Vdefault_minibuffer_frame = frame_with_minibuf;
+ KVAR (kb, Vdefault_minibuffer_frame) = frame_with_minibuf;
}
else
/* No frames left on this kboard--say no minibuffer either. */
- kb->Vdefault_minibuffer_frame = Qnil;
+ KVAR (kb, Vdefault_minibuffer_frame) = Qnil;
}
/* Cause frame titles to update--necessary if we now have just one frame. */
w = XWINDOW (window);
if (!NILP (w->buffer))
- XBUFFER (w->buffer)->display_time = Fcurrent_time ();
+ BVAR (XBUFFER (w->buffer), display_time) = Fcurrent_time ();
if (!NILP (w->vchild))
make_frame_visible_1 (w->vchild);
if (len > 1 && str[0] == 'F')
{
char *end_ptr;
+ long int n;
+ errno = 0;
+ n = strtol (str + 1, &end_ptr, 10);
- strtol (str + 1, &end_ptr, 10);
-
- if (end_ptr == str + len)
+ if (end_ptr == str + len
+ && INT_MIN <= n && n <= INT_MAX
+ && ((LONG_MIN < n && n < LONG_MAX) || errno != ERANGE))
return 1;
}
return 0;
/* Check for no change needed in this very common case
before we do any consing. */
- if (frame_name_fnn_p (SDATA (f->name),
+ if (frame_name_fnn_p (SSDATA (f->name),
SBYTES (f->name)))
return;
/* Don't allow the user to set the frame name to F<num>, so it
doesn't clash with the names we generate for terminal frames. */
- if (frame_name_fnn_p (SDATA (name), SBYTES (name)))
+ if (frame_name_fnn_p (SSDATA (name), SBYTES (name)))
error ("Frame names of the form F<num> are usurped by Emacs");
}
register Lisp_Object old_alist_elt;
/* The buffer-list parameters are stored in a special place and not
- in the alist. */
+ in the alist. All buffers must be live. */
if (EQ (prop, Qbuffer_list))
{
- f->buffer_list = val;
+ Lisp_Object list = Qnil;
+ for (; CONSP (val); val = XCDR (val))
+ if (!NILP (Fbuffer_live_p (XCAR (val))))
+ list = Fcons (XCAR (val), list);
+ f->buffer_list = Fnreverse (list);
return;
}
if (EQ (prop, Qburied_buffer_list))
{
- f->buried_buffer_list = val;
+ Lisp_Object list = Qnil;
+ for (; CONSP (val); val = XCDR (val))
+ if (!NILP (Fbuffer_live_p (XCAR (val))))
+ list = Fcons (XCAR (val), list);
+ f->buried_buffer_list = Fnreverse (list);
return;
}
elt = Fassq (Qforeground_color, alist);
if (CONSP (elt) && STRINGP (XCDR (elt)))
{
- if (strncmp (SDATA (XCDR (elt)),
+ if (strncmp (SSDATA (XCDR (elt)),
unspecified_bg,
SCHARS (XCDR (elt))) == 0)
store_in_alist (&alist, Qforeground_color, tty_color_name (f, bg));
- else if (strncmp (SDATA (XCDR (elt)),
+ else if (strncmp (SSDATA (XCDR (elt)),
unspecified_fg,
SCHARS (XCDR (elt))) == 0)
store_in_alist (&alist, Qforeground_color, tty_color_name (f, fg));
elt = Fassq (Qbackground_color, alist);
if (CONSP (elt) && STRINGP (XCDR (elt)))
{
- if (strncmp (SDATA (XCDR (elt)),
+ if (strncmp (SSDATA (XCDR (elt)),
unspecified_fg,
SCHARS (XCDR (elt))) == 0)
store_in_alist (&alist, Qbackground_color, tty_color_name (f, fg));
- else if (strncmp (SDATA (XCDR (elt)),
+ else if (strncmp (SSDATA (XCDR (elt)),
unspecified_bg,
SCHARS (XCDR (elt))) == 0)
store_in_alist (&alist, Qbackground_color, tty_color_name (f, bg));
if (EQ (parameter, Qbackground_color))
{
- color_name = SDATA (value);
+ color_name = SSDATA (value);
csz = SCHARS (value);
if (strncmp (color_name, unspecified_bg, csz) == 0)
value = tty_color_name (f, FRAME_BACKGROUND_PIXEL (f));
}
else if (EQ (parameter, Qforeground_color))
{
- color_name = SDATA (value);
+ color_name = SSDATA (value);
csz = SCHARS (value);
if (strncmp (color_name, unspecified_fg, csz) == 0)
value = tty_color_name (f, FRAME_FOREGROUND_PIXEL (f));
}
/* Now process them in reverse of specified order. */
- for (i--; i >= 0; i--)
+ while (--i >= 0)
{
prop = parms[i];
val = values[i];
/* Record in these vectors all the parms specified. */
Lisp_Object *parms;
Lisp_Object *values;
- int i, p;
+ size_t i, p;
int left_no_change = 0, top_no_change = 0;
int icon_left_no_change = 0, icon_top_no_change = 0;
int size_changed = 0;
}
/* Now process them in reverse of specified order. */
- for (i--; i >= 0; i--)
+ while (i-- != 0)
{
Lisp_Object prop, val;
bgcolor = Fassq (Qbackground_color, f->param_alist);
if (CONSP (bgcolor) && (bgcolor = XCDR (bgcolor), STRINGP (bgcolor)))
{
- Lisp_Object index = Fget (Qbackground_color, Qx_frame_parameter);
- if (NATNUMP (index)
- && (XFASTINT (index)
+ Lisp_Object parm_index = Fget (Qbackground_color, Qx_frame_parameter);
+ if (NATNUMP (parm_index)
+ && (XFASTINT (parm_index)
< sizeof (frame_parms)/sizeof (frame_parms[0]))
- && FRAME_RIF (f)->frame_parm_handlers[XFASTINT (index)])
- (*FRAME_RIF (f)->frame_parm_handlers[XFASTINT (index)])
+ && FRAME_RIF (f)->frame_parm_handlers[XFASTINT (parm_index)])
+ (*FRAME_RIF (f)->frame_parm_handlers[XFASTINT (parm_index)])
(f, bgcolor, Qnil);
}
fontset = fs_query_fontset (arg, 0);
if (fontset < 0)
{
- font_object = font_open_by_name (f, SDATA (arg));
+ font_object = font_open_by_name (f, SSDATA (arg));
if (NILP (font_object))
- error ("Font `%s' is not defined", SDATA (arg));
+ error ("Font `%s' is not defined", SSDATA (arg));
arg = AREF (font_object, FONT_NAME_INDEX);
}
else if (fontset > 0)
{
Lisp_Object ascii_font = fontset_ascii (fontset);
- font_object = font_open_by_name (f, SDATA (ascii_font));
+ font_object = font_open_by_name (f, SSDATA (ascii_font));
if (NILP (font_object))
error ("Font `%s' is not defined", SDATA (arg));
arg = AREF (font_object, FONT_NAME_INDEX);
char *p0, *p1;
CHECK_STRING (new_value);
- p0 = p1 = SDATA (new_value);
+ p0 = p1 = SSDATA (new_value);
new_value = Qnil;
while (*p0)
{
return;
/* If name is entirely invalid, or nearly so, use `emacs'. */
- if (good_count == 0
- || (good_count == 1 && bad_count > 0))
+ if (good_count < 2)
{
Vx_resource_name = build_string ("emacs");
return;
/* Start with emacs.FRAMENAME for the name (the specific one)
and with `Emacs' for the class key (the general one). */
- strcpy (name_key, SDATA (Vx_resource_name));
- strcpy (class_key, SDATA (Vx_resource_class));
+ strcpy (name_key, SSDATA (Vx_resource_name));
+ strcpy (class_key, SSDATA (Vx_resource_class));
strcat (class_key, ".");
- strcat (class_key, SDATA (class));
+ strcat (class_key, SSDATA (class));
if (!NILP (component))
{
strcat (class_key, ".");
- strcat (class_key, SDATA (subclass));
+ strcat (class_key, SSDATA (subclass));
strcat (name_key, ".");
- strcat (name_key, SDATA (component));
+ strcat (name_key, SSDATA (component));
}
strcat (name_key, ".");
- strcat (name_key, SDATA (attribute));
+ strcat (name_key, SSDATA (attribute));
value = x_get_string_resource (rdb, name_key, class_key);
switch (type)
{
case RES_TYPE_NUMBER:
- return make_number (atoi (SDATA (tem)));
+ return make_number (atoi (SSDATA (tem)));
case RES_TYPE_BOOLEAN_NUMBER:
- if (!strcmp (SDATA (tem), "on")
- || !strcmp (SDATA (tem), "true"))
+ if (!strcmp (SSDATA (tem), "on")
+ || !strcmp (SSDATA (tem), "true"))
return make_number (1);
- return make_number (atoi (SDATA (tem)));
+ return make_number (atoi (SSDATA (tem)));
break;
case RES_TYPE_FLOAT:
- return make_float (atof (SDATA (tem)));
+ return make_float (atof (SSDATA (tem)));
case RES_TYPE_BOOLEAN:
tem = Fdowncase (tem);
- if (!strcmp (SDATA (tem), "on")
+ if (!strcmp (SSDATA (tem), "on")
#ifdef HAVE_NS
- || !strcmp(SDATA(tem), "yes")
+ || !strcmp (SSDATA (tem), "yes")
#endif
- || !strcmp (SDATA (tem), "true"))
+ || !strcmp (SSDATA (tem), "true"))
return Qt;
else
return Qnil;
{
Lisp_Object lower;
lower = Fdowncase (tem);
- if (!strcmp (SDATA (lower), "on")
+ if (!strcmp (SSDATA (lower), "on")
#ifdef HAVE_NS
- || !strcmp(SDATA(lower), "yes")
+ || !strcmp (SSDATA (lower), "yes")
#endif
- || !strcmp (SDATA (lower), "true"))
+ || !strcmp (SSDATA (lower), "true"))
return Qt;
- else if (!strcmp (SDATA (lower), "off")
+ else if (!strcmp (SSDATA (lower), "off")
#ifdef HAVE_NS
- || !strcmp(SDATA(lower), "no")
+ || !strcmp (SSDATA (lower), "no")
#endif
- || !strcmp (SDATA (lower), "false"))
+ || !strcmp (SSDATA (lower), "false"))
return Qnil;
else
return Fintern (tem, Qnil);
CHECK_STRING (string);
- geometry = XParseGeometry ((char *) SDATA (string),
+ geometry = XParseGeometry (SSDATA (string),
&x, &y, &width, &height);
result = Qnil;
if (geometry & XValue)
#endif
}
-