/* Fully extensible Emacs, running on Unix, intended for GNU.
- Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2001,
- 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
#endif
EMACS_INT PVEC_FLAG = PSEUDOVECTOR_FLAG;
EMACS_INT gdb_array_mark_flag = ARRAY_MARK_FLAG;
+/* GDB might say "No enum type named pvec_type" if we don't have at
+ least one symbol with that type, and then xbacktrace could fail. */
+enum pvec_type gdb_pvec_type = PVEC_TYPE_MASK;
/* Command line args from shell, as list of strings. */
Lisp_Object Vcommand_line_args;
/* Hook run by `kill-emacs' before it does really anything. */
Lisp_Object Vkill_emacs_hook;
-/* An empty lisp string. To avoid having to build any other. */
-Lisp_Object empty_string;
+/* Empty lisp strings. To avoid having to build any others. */
+Lisp_Object empty_unibyte_string, empty_multibyte_string;
/* Search path separator. */
Lisp_Object Vpath_separator;
/* From glibc, a routine that returns a copy of the malloc internal state. */
extern void *malloc_get_state ();
/* From glibc, a routine that overwrites the malloc internal state. */
-extern void malloc_set_state ();
+extern int malloc_set_state ();
/* Non-zero if the MALLOC_CHECK_ enviroment variable was set while
dumping. Used to work around a bug in glibc's malloc. */
int malloc_using_checking;
--no-site-file do not load site-start.el\n\
--no-splash do not display a splash screen on startup\n\
--no-window-system, -nw do not communicate with X, ignoring $DISPLAY\n\
---quick, -Q equivalent to -q --no-site-file\n\
+--quick, -Q equivalent to -q --no-site-file --no-splash\n\
--script FILE run FILE as an Emacs Lisp script\n\
--terminal, -t DEVICE use DEVICE for terminal I/O\n\
--unibyte, --no-multibyte run Emacs in unibyte mode\n\
used for debugging Emacs\n\
--border-color, -bd COLOR main border color\n\
--border-width, -bw WIDTH width of main border\n\
---color, --color=MODE color mode for character terminals;\n\
+--color, --color=MODE override color mode for character terminals;\n\
MODE defaults to `auto', and can also\n\
be `never', `auto', `always',\n\
or a mode name like `ansi8'\n\
--fullscreen, -fs make first frame fullscreen\n\
--fullwidth, -fw make the first frame wide as the screen\n\
--geometry, -g GEOMETRY window geometry\n\
---icon-type, -i use picture of gnu for Emacs icon\n\
+--no-bitmap-icon, -nbi do not use picture of gnu for Emacs icon\n\
--iconic start Emacs in iconified state\n\
--internal-border, -ib WIDTH width between text and main border\n\
--line-spacing, -lsp PIXELS additional space to put between lines\n\
#endif
-#ifdef SIGUSR1
-SIGTYPE
-handle_USR1_signal (sig)
- int sig;
-{
- struct input_event buf;
-
- SIGNAL_THREAD_CHECK (sig);
- bzero (&buf, sizeof buf);
- buf.kind = USER_SIGNAL_EVENT;
- buf.frame_or_window = selected_frame;
-
- kbd_buffer_store_event (&buf);
-}
-#endif /* SIGUSR1 */
-
-#ifdef SIGUSR2
-SIGTYPE
-handle_USR2_signal (sig)
- int sig;
-{
- struct input_event buf;
-
- SIGNAL_THREAD_CHECK (sig);
- bzero (&buf, sizeof buf);
- buf.kind = USER_SIGNAL_EVENT;
- buf.code = 1;
- buf.frame_or_window = selected_frame;
-
- kbd_buffer_store_event (&buf);
-}
-#endif /* SIGUSR2 */
-
/* Handle bus errors, invalid instruction, etc. */
SIGTYPE
fatal_error_signal (sig)
So ignore --version otherwise. */
&& initialized)
{
- Lisp_Object tem;
+ Lisp_Object tem, tem2;
tem = Fsymbol_value (intern ("emacs-version"));
+ tem2 = Fsymbol_value (intern ("emacs-copyright"));
if (!STRINGP (tem))
{
fprintf (stderr, "Invalid value of `emacs-version'\n");
exit (1);
}
+ if (!STRINGP (tem2))
+ {
+ fprintf (stderr, "Invalid value of `emacs-copyright'\n");
+ exit (1);
+ }
else
{
printf ("GNU Emacs %s\n", SDATA (tem));
- printf ("Copyright (C) 2004 Free Software Foundation, Inc.\n");
+ printf ("%s\n", SDATA(tem2));
printf ("GNU Emacs comes with ABSOLUTELY NO WARRANTY.\n");
printf ("You may redistribute copies of Emacs\n");
printf ("under the terms of the GNU General Public License.\n");
#ifdef MAC_OSX
/* Skip process serial number passed in the form -psn_x_y as
- command-line argument. */
+ command-line argument. The WindowServer adds this option when
+ Emacs is invoked from the Finder or by the `open' command. In
+ these cases, the working directory becomes `/', so we change it
+ to the user's home directory. */
if (argc > skip_args + 1 && strncmp (argv[skip_args+1], "-psn_", 5) == 0)
- skip_args++;
+ {
+ chdir (getenv ("HOME"));
+ skip_args++;
+ }
#endif /* MAC_OSX */
#ifdef VMS
&& !getrlimit (RLIMIT_STACK, &rlim))
{
long newlim;
- extern int re_max_failures;
+ extern size_t re_max_failures;
/* Approximate the amount regex.c needs per unit of re_max_failures. */
int ratio = 20 * sizeof (char *);
/* Then add 33% to cover the size of the smaller stacks that regex.c
if (argmatch (argv, argc, "-script", "--script", 3, &junk, &skip_args))
{
noninteractive = 1; /* Set batch mode. */
- /* Convert --script to -l, un-skip it, and sort again so that -l will be
- handled in proper sequence. */
- argv[skip_args - 1] = "-l";
+ /* Convert --script to --scriptload, un-skip it, and sort again
+ so that it will be handled in proper sequence. */
+ argv[skip_args - 1] = "-scriptload";
skip_args -= 2;
sort_args (argc, argv);
}
#if defined (USG5) && defined (INTERRUPT_INPUT)
setpgrp ();
#endif
+#endif
+#if defined (HAVE_GTK_AND_PTHREAD) && !defined (SYSTEM_MALLOC) && !defined (DOUG_LEA_MALLOC)
+ {
+ extern void malloc_enable_thread P_ ((void));
+
+ malloc_enable_thread ();
+ }
#endif
}
signal (SIGILL, fatal_error_signal);
signal (SIGTRAP, fatal_error_signal);
#ifdef SIGUSR1
- signal (SIGUSR1, handle_USR1_signal);
-#ifdef SIGUSR2
- signal (SIGUSR2, handle_USR2_signal);
+ add_user_signal (SIGUSR1, "sigusr1");
#endif
+#ifdef SIGUSR2
+ add_user_signal (SIGUSR2, "sigusr2");
#endif
#ifdef SIGABRT
signal (SIGABRT, fatal_error_signal);
/* egetenv is a pretty low-level facility, which may get called in
many circumstances; it seems flimsy to put off initializing it
until calling init_callproc. */
- set_process_environment ();
+ set_initial_environment ();
/* AIX crashes are reported in system versions 3.2.3 and 3.2.4
- if this is not done. Do it after set_process_environment so that we
- don't pollute Vprocess_environment. */
+ if this is not done. Do it after set_global_environment so that we
+ don't pollute Vglobal_environment. */
/* Setting LANG here will defeat the startup locale processing... */
#ifdef AIX3_2
putenv ("LANG=C");
syms_of_frame ();
#endif
syms_of_syntax ();
+ syms_of_terminal ();
syms_of_term ();
syms_of_undo ();
#ifdef HAVE_SOUND
#endif
#endif /* HAVE_X_WINDOWS */
-#ifdef HAVE_MENUS
#ifndef HAVE_NTGUI
#ifndef MAC_OS
/* Called before init_window_once for Mac OS Classic. */
syms_of_xmenu ();
#endif
#endif
-#endif
#ifdef HAVE_NTGUI
syms_of_w32term ();
#endif
}
- /* Set up for profiling. This is known to work on FreeBSD and
- GNU/Linux. It might work on some other systems too. Give it a
- try and tell us if it works on your system. To compile for
- profiling use something like `make CFLAGS="-pg -g -O -DPROFILING=1'. */
-#if defined (__FreeBSD__) || defined (__linux)
+ /* Set up for profiling. This is known to work on FreeBSD,
+ GNU/Linux and MinGW. It might work on some other systems too.
+ Give it a try and tell us if it works on your system. To compile
+ for profiling, add -pg to the switches your platform uses in
+ CFLAGS and LDFLAGS. For example:
+ `make CFLAGS="-pg -g -O -DPROFILING=1" LDFLAGS="-pg -g"'. */
+#if defined (__FreeBSD__) || defined (GNU_LINUX) || defined(__MINGW32__)
#ifdef PROFILING
if (initialized)
{
extern void _mcleanup ();
+#ifdef __MINGW32__
+ extern unsigned char etext asm ("etext");
+#else
extern char etext;
+#endif
extern void safe_bcopy ();
extern void dump_opcode_frequencies ();
{ "-u", "--user", 30, 1 },
{ "-user", 0, 30, 1 },
{ "-debug-init", "--debug-init", 20, 0 },
- { "-i", "--icon-type", 15, 0 },
- { "-itype", 0, 15, 0 },
+ { "-nbi", "--no-bitmap-icon", 15, 0 },
{ "-iconic", "--iconic", 15, 0 },
{ "-D", "--basic-display", 12, 0},
- { "--basic-display", 0, 12, 0},
+ { "-basic-display", 0, 12, 0},
{ "-bg", "--background-color", 10, 1 },
{ "-background", 0, 10, 1 },
{ "-fg", "--foreground-color", 10, 1 },
{ "-directory", 0, 0, 1 },
{ "-l", "--load", 0, 1 },
{ "-load", 0, 0, 1 },
+ { "-scriptload", "--scriptload", 0, 1 },
{ "-f", "--funcall", 0, 1 },
{ "-funcall", 0, 0, 1 },
{ "-eval", "--eval", 0, 1 },
DEFUN ("kill-emacs", Fkill_emacs, Skill_emacs, 0, 1, "P",
doc: /* Exit the Emacs job and kill it.
If ARG is an integer, return ARG as the exit program code.
-If ARG is a string, stuff it as keyboard input.
+If ARG is a string, stuff it as keyboard input.
The value of `kill-emacs-hook', if not void,
is a list of functions (of no args),
stuff_buffered_input (stuff);
+#ifdef subprocesses
+ inhibit_sentinels = 1;
+#endif
kill_buffer_processes (Qnil);
Fdo_auto_save (Qt, Qnil);
if (! noninteractive)
error ("Dumping Emacs works only in batch mode");
-#ifdef __linux__
+#ifdef GNU_LINUX
if (heap_bss_diff > MAX_HEAP_BSS_DIFF)
{
fprintf (stderr, "**************************************************\n");
fprintf (stderr, "exec-shield in etc/PROBLEMS for more information.\n");
fprintf (stderr, "**************************************************\n");
}
-#endif /* __linux__ */
+#endif /* GNU_LINUX */
/* Bind `command-line-processed' to nil before dumping,
so that the dumped Emacs will process its command line
`ms-dos' compiled as an MS-DOS application.
`windows-nt' compiled as a native W32 application.
`cygwin' compiled using the Cygwin library.
- `vax-vms' or `axp-vms': compiled for a (Open)VMS system.
+ `vax-vms' or
+ `axp-vms' compiled for a (Open)VMS system.
Anything else indicates some sort of Unix system. */);
Vsystem_type = intern (SYSTEM_TYPE);
The hook is not run in batch mode, i.e., if `noninteractive' is non-nil. */);
Vkill_emacs_hook = Qnil;
- empty_string = build_string ("");
- staticpro (&empty_string);
-
DEFVAR_INT ("emacs-priority", &emacs_priority,
doc: /* Priority for Emacs to run at.
This value is effective only if set before Emacs is dumped,
emacs_priority = 0;
DEFVAR_LISP ("path-separator", &Vpath_separator,
- doc: /* The directory separator in search paths, as a string. */);
+ doc: /* String containing the character that separates directories in
+search paths, such as PATH and other similar environment variables. */);
{
char c = SEPCHAR;
Vpath_separator = make_string (&c, 1);