#include "console.h"
#include "process.h"
#include "redisplay.h"
+#include "frame.h"
#include "sysdep.h"
#include "syssignal.h" /* Always include before systty.h */
#include TT_C_H_PATH
#endif
-#ifdef APOLLO
-#ifndef APOLLO_SR10
-#include <default_acl.h>
-#endif
-#endif
-
#if defined (WINDOWSNT)
#include <windows.h>
#endif
/* For PATH_EXEC */
#include <paths.h>
-#if !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC
+#ifdef HEAP_IN_DATA
+void report_sheap_usage (int die_if_pure_storage_exceeded);
+#endif
+
+#if !defined (SYSTEM_MALLOC) && !defined (DOUG_LEA_MALLOC)
extern void *(*__malloc_hook)(size_t);
extern void *(*__realloc_hook)(void *, size_t);
extern void (*__free_hook)(void *);
/* Version numbers and strings */
Lisp_Object Vemacs_major_version;
Lisp_Object Vemacs_minor_version;
+Lisp_Object Vemacs_patch_level;
Lisp_Object Vemacs_beta_version;
Lisp_Object Vxemacs_codename;
#ifdef INFODOCK
Lisp_Object Vexec_path;
Lisp_Object Vexec_directory, Vconfigure_exec_directory;
Lisp_Object Vlisp_directory, Vconfigure_lisp_directory;
+Lisp_Object Vmodule_directory, Vconfigure_module_directory;
+Lisp_Object Vsite_module_directory, Vconfigure_site_module_directory;
Lisp_Object Vconfigure_package_path;
Lisp_Object Vdata_directory, Vconfigure_data_directory;
Lisp_Object Vdoc_directory, Vconfigure_doc_directory;
Lisp_Object Vconfigure_lock_directory;
Lisp_Object Vdata_directory_list;
-Lisp_Object Vinfo_directory, Vconfigure_info_directory;
+Lisp_Object Vconfigure_info_directory;
Lisp_Object Vsite_directory, Vconfigure_site_directory;
Lisp_Object Vconfigure_info_path;
Lisp_Object Vinternal_error_checking;
+Lisp_Object Vmail_lock_methods, Vconfigure_mail_lock_method;
Lisp_Object Vpath_separator;
/* The default base directory XEmacs is installed under. */
/* Type of display specified. We cannot use a Lisp symbol here because
Lisp symbols may not initialized at the time that we set this
variable. */
-CONST char *display_use;
+const char *display_use;
/* If non-zero, then the early error handler will only print the error
message and exit. */
/* Nonzero means don't perform site-lisp searches at startup */
int inhibit_site_lisp;
+/* Nonzero means don't perform site-modules searches at startup */
+int inhibit_site_modules;
+
/* Nonzero means don't respect early packages at startup */
int inhibit_early_packages;
int debug_paths;
/* Save argv and argc. */
-char **initial_argv;
-int initial_argc;
+static char **initial_argv;
+static int initial_argc;
static void sort_args (int argc, char **argv);
Lisp_Object Qkill_emacs_hook;
Lisp_Object Qsave_buffers_kill_emacs;
+extern Lisp_Object Vlisp_EXEC_SUFFIXES;
+
\f
/* Signal code for the fatal signal that was received */
static int fatal_error_code;
# if 0 /* This is evil, rarely useful, and causes grief in some cases. */
/* Check for Sun-style stack printing via /proc */
{
- CONST char *pstack = "/usr/proc/bin/pstack";
+ const char *pstack = "/usr/proc/bin/pstack";
if (access (pstack, X_OK) == 0)
{
char buf[100];
\f
DOESNT_RETURN
-fatal (CONST char *fmt, ...)
+fatal (const char *fmt, ...)
{
va_list args;
va_start (args, fmt);
GETTEXT on the format string. */
int
-stderr_out (CONST char *fmt, ...)
+stderr_out (const char *fmt, ...)
{
int retval;
va_list args;
GETTEXT on the format string. */
int
-stdout_out (CONST char *fmt, ...)
+stdout_out (const char *fmt, ...)
{
int retval;
va_list args;
/* Do not trust to what crt0 has stuffed into argv[0] */
char full_exe_path [MAX_PATH];
GetModuleFileName (NULL, full_exe_path, MAX_PATH);
- result = Fcons (build_ext_string (full_exe_path, FORMAT_FILENAME),
+ result = Fcons (build_ext_string (full_exe_path, Qfile_name),
result);
#if defined(HAVE_SHLIB)
(void)dll_init(full_exe_path);
}
else
#endif
- result = Fcons (build_ext_string (argv [i], FORMAT_FILENAME), result);
+ result = Fcons (build_ext_string (argv [i], Qfile_name),
+ result);
}
}
return result;
for (i = 0, next = argv_list; i < n; i++, next = XCDR (next))
{
- CONST char *temp;
+ const char *temp;
CHECK_STRING (XCAR (next));
- GET_C_STRING_EXT_DATA_ALLOCA (XCAR (next), FORMAT_OS, temp);
+ TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (next),
+ C_STRING_ALLOCA, temp,
+ Qnative);
(*argv) [i] = xstrdup (temp);
}
(*argv) [n] = 0;
extern int malloc_cookie;
#endif
-#if !defined(SYSTEM_MALLOC) && !defined(HAVE_LIBMCHECK)
+#if (!defined (SYSTEM_MALLOC) && !defined (HAVE_LIBMCHECK) \
+ && !defined (DOUG_LEA_MALLOC))
/* Make sure that any libraries we link against haven't installed a
hook for a gmalloc of a potentially incompatible version. */
/* If we're using libmcheck, the hooks have already been initialized, */
__malloc_hook = NULL;
__realloc_hook = NULL;
__free_hook = NULL;
-#endif /* not SYSTEM_MALLOC */
+#endif /* not SYSTEM_MALLOC or HAVE_LIBMCHECK or DOUG_LEA_MALLOC */
noninteractive = 0;
sort_args (argc, argv);
- /* Map in shared memory, if we are using that. */
-#ifdef HAVE_SHM
- if (argmatch (argv, argc, "-nl", "--no-shared-memory", 6, NULL, &skip_args))
- {
- map_in_data (0);
- /* The shared memory was just restored, which clobbered this. */
- skip_args = 1;
- }
- else
- {
- map_in_data (1);
- /* The shared memory was just restored, which clobbered this. */
- skip_args = 0;
- }
-#endif /* HAVE_SHM */
-
#if (defined (MSDOS) && defined (EMX)) || defined (WIN32) || defined (_SCO_DS)
environ = envp;
#endif
clearerr (stdin);
-#ifdef APOLLO
-#ifndef APOLLO_SR10
- /* If USE_DOMAIN_ACLS environment variable exists,
- use ACLs rather than UNIX modes. */
- if (egetenv ("USE_DOMAIN_ACLS"))
- default_acl (USE_DEFACL);
-#endif
-#endif /* APOLLO */
-
#if defined (HAVE_MMAP) && defined (REL_ALLOC)
/* ralloc can only be used if using the GNU memory allocator. */
init_ralloc ();
inhibit_early_packages = 1;
skip_args--;
}
+#ifdef HAVE_SHLIB
+ if (argmatch (argv, argc, "-no-site-modules", "--no-site-modules",
+ 9, NULL, &skip_args))
+ {
+ inhibit_site_modules = 1;
+ skip_args--;
+ }
+#else
+ inhibit_site_modules = 1;
+#endif
if (argmatch (argv, argc, "-vanilla", "--vanilla",
7, NULL, &skip_args))
{
We try to do things in an order that minimizes the non-obvious
dependencies between functions. */
+ /* purify_flag 1 is correct even if CANNOT_DUMP.
+ * loadup.el will set to nil at end. */
+
+ purify_flag = 0;
+#ifdef PDUMP
+ if (restart)
+ initialized = 1;
+ else {
+ initialized = pdump_load ();
+ purify_flag = !initialized;
+ }
+#else
+ if (!initialized)
+ purify_flag = 1;
+#endif
+
if (!initialized)
{
/* Initialize things so that new Lisp objects
/* Initialize Qnil, Qt, Qunbound, and the
obarray. After this, symbols can be
- interned. This depends on init_alloc_once(). */
+ interned. This depends on init_alloc_once_early(). */
init_symbols_once_early ();
/* Declare the basic symbols pertaining to errors,
The *only* thing that the syms_of_*() functions are allowed to do
is call one of the following three functions:
+ INIT_LRECORD_IMPLEMENTATION()
defsymbol()
defsubr() (i.e. DEFSUBR)
deferror()
syms_of_abbrev ();
syms_of_alloc ();
-#ifdef HAVE_X_WINDOWS
- syms_of_balloon_x ();
-#endif
syms_of_buffer ();
syms_of_bytecode ();
syms_of_callint ();
syms_of_data ();
#ifdef DEBUG_XEMACS
syms_of_debug ();
+ syms_of_tests ();
#endif /* DEBUG_XEMACS */
syms_of_device ();
#ifdef HAVE_DIALOGS
syms_of_dialog ();
#endif
syms_of_dired ();
-#ifdef HAVE_SHLIB
- syms_of_dll ();
-#endif
syms_of_doc ();
syms_of_editfns ();
syms_of_elhash ();
#if defined (HAVE_MENUBARS) || defined (HAVE_SCROLLBARS) || defined (HAVE_DIALOGS) || defined (HAVE_TOOLBARS)
syms_of_gui ();
#endif
+ syms_of_gutter ();
syms_of_indent ();
syms_of_intl ();
syms_of_keymap ();
syms_of_menubar ();
#endif
syms_of_minibuf ();
+#ifdef HAVE_SHLIB
+ syms_of_module ();
+#endif
syms_of_objects ();
syms_of_print ();
#if !defined (NO_SUBPROCESSES)
syms_of_rangetab ();
syms_of_redisplay ();
syms_of_search ();
+ syms_of_select ();
syms_of_signal ();
syms_of_sound ();
syms_of_specifier ();
#endif
#ifdef HAVE_X_WINDOWS
+ syms_of_balloon_x ();
syms_of_device_x ();
#ifdef HAVE_DIALOGS
syms_of_dialog_x ();
#ifdef HAVE_MENUBARS
syms_of_menubar_x ();
#endif
- syms_of_xselect ();
+ syms_of_select_x ();
#if defined (HAVE_MENUBARS) || defined (HAVE_SCROLLBARS) || defined (HAVE_DIALOGS) || defined (HAVE_TOOLBARS)
syms_of_gui_x ();
#endif
+#ifdef HAVE_XIM
+#ifdef XIM_XLIB
+ syms_of_input_method_xlib ();
+#endif
+#endif /* HAVE_XIM */
#endif /* HAVE_X_WINDOWS */
#ifdef HAVE_MS_WINDOWS
syms_of_objects_mswindows ();
syms_of_select_mswindows ();
syms_of_glyphs_mswindows ();
+ syms_of_gui_mswindows ();
#ifdef HAVE_MENUBARS
syms_of_menubar_mswindows ();
#endif
#ifdef HAVE_MSW_C_DIRED
syms_of_dired_mswindows ();
#endif
+#ifdef WINDOWSNT
+ syms_of_ntproc ();
+#endif
#endif /* HAVE_MS_WINDOWS */
#ifdef MULE
syms_of_mule_charset ();
#endif
#ifdef FILE_CODING
- syms_of_mule_coding ();
+ syms_of_file_coding ();
#endif
#ifdef MULE
#ifdef HAVE_WNN
syms_of_eldap ();
#endif
+#ifdef HAVE_GPM
+ syms_of_gpmevent ();
+#endif
+
/* Now create the subtypes for the types that have them.
We do this before the vars_*() because more symbols
may get initialized here. */
console_type_create_device_x ();
console_type_create_frame_x ();
console_type_create_glyphs_x ();
+ console_type_create_select_x ();
#ifdef HAVE_MENUBARS
console_type_create_menubar_x ();
#endif
console_type_create_objects_mswindows ();
console_type_create_redisplay_mswindows ();
console_type_create_glyphs_mswindows ();
+ console_type_create_select_mswindows ();
# ifdef HAVE_SCROLLBARS
console_type_create_scrollbar_mswindows ();
# endif
specifier_type_create ();
specifier_type_create_image ();
+ specifier_type_create_gutter ();
specifier_type_create_objects ();
#ifdef HAVE_TOOLBARS
specifier_type_create_toolbar ();
image_instantiator_format_create ();
image_instantiator_format_create_glyphs_eimage ();
image_instantiator_format_create_glyphs_widget ();
+#ifdef HAVE_TTY
+ image_instantiator_format_create_glyphs_tty ();
+#endif
#ifdef HAVE_X_WINDOWS
image_instantiator_format_create_glyphs_x ();
#endif /* HAVE_X_WINDOWS */
lstream_type_create ();
#ifdef FILE_CODING
- lstream_type_create_mule_coding ();
+ lstream_type_create_file_coding ();
#endif
#if defined (HAVE_MS_WINDOWS) && !defined(HAVE_MSG_SELECT)
lstream_type_create_mswindows_selectable ();
staticpro()
Fprovide(symbol)
intern()
- pure_put()
+ Fput()
xmalloc()
defsymbol(), if it's absolutely necessary and you're sure that
the symbol isn't referenced anywhere else in the initialization
Any of the object-creating functions on alloc.c: e.g.
make_pure_*()
- Fpurecopy()
make_string()
build_string()
make_vector()
Fcons()
listN()
make_opaque_ptr()
- make_opaque_long()
perhaps a few others.
*/
/* Now allow Fprovide() statements to be made. */
init_provide_once ();
+ /* Do that before any specifier creation (esp. vars_of_glyphs()) */
+ vars_of_specifier ();
+
vars_of_abbrev ();
vars_of_alloc ();
-#ifdef HAVE_X_WINDOWS
- vars_of_balloon_x ();
-#endif
vars_of_buffer ();
vars_of_bytecode ();
vars_of_callint ();
vars_of_callproc ();
+ vars_of_chartab ();
vars_of_cmdloop ();
vars_of_cmds ();
vars_of_console ();
vars_of_data ();
#ifdef DEBUG_XEMACS
vars_of_debug ();
+ vars_of_tests ();
#endif
vars_of_console_stream ();
vars_of_device ();
#if defined (HAVE_MENUBARS) || defined (HAVE_SCROLLBARS) || defined (HAVE_DIALOGS) || defined (HAVE_TOOLBARS)
vars_of_gui ();
#endif
+ vars_of_gutter ();
vars_of_indent ();
vars_of_insdel ();
vars_of_intl ();
vars_of_menubar ();
#endif
vars_of_minibuf ();
+#ifdef HAVE_SHLIB
+ vars_of_module ();
+#endif
+#ifdef WINDOWSNT
+ vars_of_nt ();
+ vars_of_ntproc ();
+#endif
vars_of_objects ();
vars_of_print ();
vars_of_scrollbar ();
#endif
vars_of_search ();
+ vars_of_select ();
vars_of_sound ();
- vars_of_specifier ();
vars_of_symbols ();
vars_of_syntax ();
#ifdef HAVE_TOOLBARS
#endif
#ifdef HAVE_X_WINDOWS
+ vars_of_balloon_x ();
vars_of_device_x ();
#ifdef HAVE_DIALOGS
vars_of_dialog_x ();
vars_of_menubar_x ();
#endif
vars_of_objects_x ();
- vars_of_xselect ();
+ vars_of_select_x ();
#ifdef HAVE_SCROLLBARS
vars_of_scrollbar_x ();
#endif
#if defined (HAVE_MENUBARS) || defined (HAVE_SCROLLBARS) || defined (HAVE_DIALOGS) || defined (HAVE_TOOLBARS)
vars_of_gui_x ();
#endif
-#endif
+#endif /* HAVE_X_WINDOWS */
#ifdef HAVE_MS_WINDOWS
vars_of_device_mswindows ();
#ifdef MULE
vars_of_mule ();
+ vars_of_mule_ccl ();
vars_of_mule_charset ();
#endif
#ifdef FILE_CODING
- vars_of_mule_coding ();
+ vars_of_file_coding ();
#endif
#ifdef MULE
#ifdef HAVE_WNN
vars_of_eldap ();
#endif
+#ifdef HAVE_GPM
+ vars_of_gpmevent ();
+#endif
+
/* Now initialize any specifier variables. We do this later
because it has some dependence on the vars initialized
above.
*/
specifier_vars_of_glyphs ();
+ specifier_vars_of_gutter ();
#ifdef HAVE_MENUBARS
specifier_vars_of_menubar ();
#endif
earlier. The second may also depend on the first. */
complex_vars_of_mule_charset ();
#endif
-#if defined(FILE_CODING)
- complex_vars_of_mule_coding ();
+#ifdef FILE_CODING
+ complex_vars_of_file_coding ();
#endif
/* This calls allocate_glyph(), which creates specifiers
garbage_collect_1 ();
}
#endif
+#ifdef PDUMP
+ } else if (!restart) {
+ reinit_alloc_once_early ();
+ reinit_symbols_once_early ();
+ reinit_opaque_once_early ();
+
+ reinit_console_type_create_stream ();
+#ifdef HAVE_TTY
+ reinit_console_type_create_tty ();
+#endif
+#ifdef HAVE_X_WINDOWS
+ reinit_console_type_create_x ();
+ reinit_console_type_create_device_x ();
+#endif
+#ifdef HAVE_MS_WINDOWS
+ reinit_console_type_create_mswindows ();
+#endif
+
+ reinit_specifier_type_create ();
+ reinit_specifier_type_create_image ();
+ reinit_specifier_type_create_gutter ();
+ reinit_specifier_type_create_objects ();
+#ifdef HAVE_TOOLBARS
+ reinit_specifier_type_create_toolbar ();
+#endif
+
+ structure_type_create ();
+
+ structure_type_create_chartab ();
+ structure_type_create_faces ();
+ structure_type_create_rangetab ();
+ structure_type_create_hash_table ();
+
+ lstream_type_create ();
+#ifdef FILE_CODING
+ lstream_type_create_file_coding ();
+#endif
+#if defined (HAVE_MS_WINDOWS) && !defined(HAVE_MSG_SELECT)
+ lstream_type_create_mswindows_selectable ();
+#endif
+#ifdef HAVE_UNIX_PROCESSES
+ process_type_create_unix ();
+#endif
+#ifdef HAVE_WIN32_PROCESSES
+ process_type_create_nt ();
+#endif
+
+ reinit_vars_of_buffer ();
+ reinit_vars_of_console ();
+#ifdef DEBUG_XEMACS
+ reinit_vars_of_debug ();
+#endif
+ reinit_vars_of_device ();
+ reinit_vars_of_eval ();
+#ifdef HAVE_X_WINDOWS
+ reinit_vars_of_event_Xt ();
+#endif
+#if defined(HAVE_TTY) && (defined (DEBUG_TTY_EVENT_STREAM) || !defined (HAVE_X_WINDOWS))
+ reinit_vars_of_event_tty ();
+#endif
+#ifdef HAVE_MS_WINDOWS
+ reinit_vars_of_event_mswindows ();
+#endif
+ reinit_vars_of_event_stream ();
+ reinit_vars_of_events ();
+ reinit_vars_of_extents ();
+ reinit_vars_of_font_lock ();
+ reinit_vars_of_glyphs ();
+ reinit_vars_of_glyphs_widget ();
+ reinit_vars_of_insdel ();
+ reinit_vars_of_lread ();
+ reinit_vars_of_lstream ();
+ reinit_vars_of_minibuf ();
+#ifdef HAVE_SHLIB
+ reinit_vars_of_module ();
+#endif
+ reinit_vars_of_objects ();
+ reinit_vars_of_print ();
+ reinit_vars_of_redisplay ();
+ reinit_vars_of_search ();
+ reinit_vars_of_undo ();
+ reinit_vars_of_window ();
+
+#ifdef HAVE_MS_WINDOWS
+ reinit_vars_of_frame_mswindows ();
+#endif
+
+#ifdef HAVE_X_WINDOWS
+ reinit_vars_of_device_x ();
+#ifdef HAVE_SCROLLBARS
+ reinit_vars_of_scrollbar_x ();
+#endif
+#ifdef HAVE_MENUBARS
+ reinit_vars_of_menubar_x ();
+#endif
+ reinit_vars_of_select_x ();
+#if defined (HAVE_MENUBARS) || defined (HAVE_SCROLLBARS) || defined (HAVE_DIALOGS) || defined (HAVE_TOOLBARS)
+ reinit_vars_of_gui_x ();
+#endif
+#endif /* HAVE_X_WINDOWS */
+
+#if defined(MULE) && defined(HAVE_WNN)
+ reinit_vars_of_mule_wnn ();
+#endif
+
+ reinit_complex_vars_of_buffer ();
+ reinit_complex_vars_of_console ();
+ reinit_complex_vars_of_minibuf ();
+#endif /* PDUMP */
}
+
/* CONGRATULATIONS!!! We have successfully initialized the Lisp
engine. */
init_redisplay (); /* Determine terminal type.
init_sys_modes uses results */
+ init_frame ();
init_event_stream (); /* Set up so we can get user input. */
init_macros (); /* set up so we can run macros. */
init_editfns (); /* Determine the name of the user we're running as */
else
{
Vinvocation_path = decode_env_path ("PATH", NULL);
- locate_file (Vinvocation_path, Vinvocation_name, EXEC_SUFFIXES,
+ locate_file (Vinvocation_path, Vinvocation_name,
+ Vlisp_EXEC_SUFFIXES,
&Vinvocation_directory, X_OK);
}
struct standard_args
{
- CONST char * CONST name;
- CONST char * CONST longname;
+ const char *name;
+ const char *longname;
int priority;
int nargs;
};
-static struct standard_args standard_args[] =
+static const struct standard_args standard_args[] =
{
/* Handled by main_1 above: */
{ "-nl", "--no-shared-memory", 100, 0 },
(int nargs, Lisp_Object *args))
{
int ac;
- CONST Extbyte *wampum;
+ const Extbyte *wampum;
int namesize;
int total_len;
Lisp_Object orig_invoc_name = Fcar (Vcommand_line_args);
- CONST Extbyte **wampum_all = alloca_array (CONST Extbyte *, nargs);
+ const Extbyte **wampum_all = alloca_array (const Extbyte *, nargs);
int *wampum_all_len = alloca_array (int, nargs);
assert (!gc_in_progress);
/* Need to convert the orig_invoc_name and all of the arguments
to external format. */
- GET_STRING_EXT_DATA_ALLOCA (orig_invoc_name, FORMAT_OS, wampum,
- namesize);
+ TO_EXTERNAL_FORMAT (LISP_STRING, orig_invoc_name,
+ ALLOCA, (wampum, namesize),
+ Qnative);
namesize++;
for (ac = 0, total_len = namesize; ac < nargs; ac++)
{
CHECK_STRING (args[ac]);
- GET_STRING_EXT_DATA_ALLOCA (args[ac], FORMAT_OS,
- wampum_all[ac],
- wampum_all_len[ac]);
+ TO_EXTERNAL_FORMAT (LISP_STRING, args[ac],
+ ALLOCA, (wampum_all[ac], wampum_all_len[ac]),
+ Qnative);
wampum_all_len[ac]++;
total_len += wampum_all_len[ac];
}
DO_REALLOC (run_temacs_args, run_temacs_args_size, total_len, char);
- DO_REALLOC (run_temacs_argv, run_temacs_argv_size, nargs+1, char *);
+ DO_REALLOC (run_temacs_argv, run_temacs_argv_size, nargs+2, char *);
memcpy (run_temacs_args, wampum, namesize);
run_temacs_argv [0] = run_temacs_args;
unbind_to (0, Qnil); /* this closes loadup.el */
purify_flag = 0;
run_temacs_argc = nargs + 1;
-#if 0
-#ifdef REPORT_PURE_USAGE
- report_pure_usage (1, 0);
-#else
- report_pure_usage (0, 0);
+#ifdef HEAP_IN_DATA
+ report_sheap_usage (0);
#endif
-#endif /* 0 */
LONGJMP (run_temacs_catch, 1);
return Qnil; /* not reached; warning suppression */
}
{
/* Disable all calls to free() when XEmacs is exiting and it doesn't */
/* matter. */
- __free_hook = voodoo_free_hook;
-}
+ __free_hook =
+#ifdef __GNUC__ /* prototype of __free_hook varies with glibc version */
+ (__typeof__ (__free_hook))
#endif
+ voodoo_free_hook;
+}
+#endif /* GNU_MALLOC */
DEFUN ("kill-emacs", Fkill_emacs, 0, 1, "P", /*
Exit the XEmacs job and kill it. Ask for confirmation, without argument.
UNGCPRO;
- shut_down_emacs (0, ((STRINGP (arg)) ? arg : Qnil));
+ shut_down_emacs (0, STRINGP (arg) ? arg : Qnil);
#if defined(GNU_MALLOC)
- __free_hook = voodoo_free_hook;
+ __free_hook =
+#ifdef __GNUC__ /* prototype of __free_hook varies with glibc version */
+ (__typeof__ (__free_hook))
+#endif
+ voodoo_free_hook;
#endif
- exit ((INTP (arg)) ? XINT (arg) : 0);
+ exit (INTP (arg) ? XINT (arg) : 0);
/* NOTREACHED */
return Qnil; /* I'm sick of the compiler warning */
}
("Your files have been auto-saved.\n"
"Use `M-x recover-session' to recover them.\n"
"\n"
+ "If you have access to the PROBLEMS file that came with your\n"
+ "version of XEmacs, please check to see if your crash is described\n"
+ "there, as there may be a workaround available.\n"
#ifdef INFODOCK
- "Please report this bug by selecting `Report-Bug' in the InfoDock\n"
- "menu.\n"
+ "Otherwise, please report this bug by selecting `Report-Bug'\n"
+ "in the InfoDock menu.\n"
#else
- "Please report this bug by running the send-pr script included\n"
- "with XEmacs, or selecting `Send Bug Report' from the help menu.\n"
+ "Otherwise, please report this bug by running the send-pr\n"
+ "script included with XEmacs, or selecting `Send Bug Report'\n"
+ "from the help menu.\n"
"As a last resort send ordinary email to `crashes@xemacs.org'.\n"
#endif
"*MAKE SURE* to include the information in the command\n"
"\n"
" gdb ");
{
- CONST char *name;
+ const char *name;
char *dir = 0;
/* Now try to determine the actual path to the executable,
to try to make the backtrace-determination process as foolproof
as possible. */
- if (GC_STRINGP (Vinvocation_name))
+ if (STRINGP (Vinvocation_name))
name = (char *) XSTRING_DATA (Vinvocation_name);
else
name = "xemacs";
- if (GC_STRINGP (Vinvocation_directory))
+ if (STRINGP (Vinvocation_directory))
dir = (char *) XSTRING_DATA (Vinvocation_directory);
if (!dir || dir[0] != '/')
stderr_out ("`which %s`", name);
\f
#ifndef CANNOT_DUMP
-/* Nothing like this can be implemented on an Apollo.
- What a loss! */
+#if !defined(PDUMP) || !defined(SYSTEM_MALLOC)
extern char my_edata[];
-
-#ifdef HAVE_SHM
-
-DEFUN ("dump-emacs-data", Fdump_emacs_data, 1, 1, 0, /*
-Dump current state of XEmacs into data file FILENAME.
-This function exists on systems that use HAVE_SHM.
-*/
- (intoname))
-{
- /* This function can GC */
- int opurify;
- struct gcpro gcpro1;
- GCPRO1 (intoname);
-
- CHECK_STRING (intoname);
- intoname = Fexpand_file_name (intoname, Qnil);
-
- opurify = purify_flag;
- purify_flag = 0;
-
- fflush (stderr);
- fflush (stdout);
-
- disksave_object_finalization ();
- release_breathing_space ();
-
- /* Tell malloc where start of impure now is */
- /* Also arrange for warnings when nearly out of space. */
-#ifndef SYSTEM_MALLOC
- memory_warnings (my_edata, malloc_warning);
#endif
- UNGCPRO;
- map_out_data (XSTRING_DATA (intoname));
- purify_flag = opurify;
-
- return Qnil;
-}
-
-#else /* not HAVE_SHM */
extern void disable_free_hook (void);
DEFUN ("dump-emacs", Fdump_emacs, 2, 2, 0, /*
opurify = purify_flag;
purify_flag = 0;
-#ifdef DEBUG_XEMACS
- report_pure_usage (1, 1);
-#else
- report_pure_usage (0, 1);
+#ifdef HEAP_IN_DATA
+ report_sheap_usage (1);
#endif
+ clear_message ();
+
fflush (stderr);
fflush (stdout);
char *intoname_ext;
char *symname_ext;
- GET_C_STRING_FILENAME_DATA_ALLOCA (intoname, intoname_ext);
+ TO_EXTERNAL_FORMAT (LISP_STRING, intoname,
+ C_STRING_ALLOCA, intoname_ext,
+ Qfile_name);
+
if (STRINGP (symname))
- GET_C_STRING_FILENAME_DATA_ALLOCA (symname, symname_ext);
+ TO_EXTERNAL_FORMAT (LISP_STRING, symname,
+ C_STRING_ALLOCA, symname_ext,
+ Qfile_name);
else
symname_ext = 0;
garbage_collect_1 ();
+
+#ifdef PDUMP
+ pdump ();
+#else
+
#ifdef DOUG_LEA_MALLOC
malloc_state_ptr = malloc_get_state ();
#endif
#ifdef DOUG_LEA_MALLOC
free (malloc_state_ptr);
#endif
+#endif /* not PDUMP */
}
#endif /* not MSDOS and EMX */
return Qnil;
}
-#endif /* not HAVE_SHM */
-
#endif /* not CANNOT_DUMP */
\f
#ifndef SEPCHAR
/* Split STRING into a list of substrings. The substrings are the
parts of original STRING separated by SEPCHAR. */
static Lisp_Object
-split_string_by_emchar_1 (CONST Bufbyte *string, Bytecount size,
+split_string_by_emchar_1 (const Bufbyte *string, Bytecount size,
Emchar sepchar)
{
Lisp_Object result = Qnil;
- CONST Bufbyte *end = string + size;
+ const Bufbyte *end = string + size;
while (1)
{
- CONST Bufbyte *p = string;
+ const Bufbyte *p = string;
while (p < end)
{
if (charptr_emchar (p) == sepchar)
}
/* The same as the above, except PATH is an external C string (it is
- converted as FORMAT_FILENAME), and sepchar is hardcoded to SEPCHAR
+ converted using Qfile_name), and sepchar is hardcoded to SEPCHAR
(':' or whatever). */
Lisp_Object
-decode_path (CONST char *path)
+decode_path (const char *path)
{
- int len;
+ Bytecount newlen;
Bufbyte *newpath;
if (!path)
return Qnil;
- GET_C_CHARPTR_INT_FILENAME_DATA_ALLOCA (path, newpath);
+ TO_INTERNAL_FORMAT (C_STRING, path, ALLOCA, (newpath, newlen), Qfile_name);
- len = strlen ((const char *) newpath);
/* #### Does this make sense? It certainly does for
decode_env_path(), but it looks dubious here. Does any code
depend on decode_path("") returning nil instead of an empty
string? */
- if (!len)
+ if (!newlen)
return Qnil;
- return split_string_by_emchar_1 (newpath, (Bytecount)len, SEPCHAR);
+ return split_string_by_emchar_1 (newpath, newlen, SEPCHAR);
}
Lisp_Object
-decode_env_path (CONST char *evarname, CONST char *default_)
+decode_env_path (const char *evarname, const char *default_)
{
- CONST char *path = 0;
+ const char *path = 0;
if (evarname)
path = egetenv (evarname);
if (!path)
/* This highly dubious kludge ... shut up Jamie, I'm tired of your slagging. */
DOESNT_RETURN
-assert_failed (CONST char *file, int line, CONST char *expr)
+assert_failed (const char *file, int line, const char *expr)
{
stderr_out ("Fatal error: assertion failed, file %s, line %d, %s\n",
file, line, expr);
syms_of_emacs (void)
{
#ifndef CANNOT_DUMP
-#ifdef HAVE_SHM
- DEFSUBR (Fdump_emacs_data);
-#else
DEFSUBR (Fdump_emacs);
-#endif
#endif /* !CANNOT_DUMP */
DEFSUBR (Frun_emacs_from_temacs);
DEFVAR_LISP ("system-configuration", &Vsystem_configuration /*
String naming the configuration XEmacs was built for.
*/ );
- Vsystem_configuration = Fpurecopy (build_string (EMACS_CONFIGURATION));
+ Vsystem_configuration = build_string (EMACS_CONFIGURATION);
#ifndef EMACS_CONFIG_OPTIONS
# define EMACS_CONFIG_OPTIONS "UNKNOWN"
DEFVAR_LISP ("system-configuration-options", &Vsystem_configuration_options /*
String containing the configuration options XEmacs was built with.
*/ );
- Vsystem_configuration_options = Fpurecopy (build_string
- (EMACS_CONFIG_OPTIONS));
+ Vsystem_configuration_options = build_string (EMACS_CONFIG_OPTIONS);
DEFVAR_LISP ("emacs-major-version", &Vemacs_major_version /*
Major version number of this version of Emacs, as an integer.
*/ );
Vemacs_minor_version = make_int (EMACS_MINOR_VERSION);
- DEFVAR_LISP ("emacs-beta-version", &Vemacs_beta_version /*
+ DEFVAR_LISP ("emacs-patch-level", &Vemacs_patch_level /*
+The patch level of this version of Emacs, as an integer.
+The value is non-nil if this version of XEmacs is part of a series of
+stable XEmacsen, but has bug fixes applied.
+Warning: this variable does not exist in FSF Emacs or in XEmacs versions
+earlier than 21.1.1
+*/ );
+#ifdef EMACS_PATCH_LEVEL
+ Vemacs_patch_level = make_int (EMACS_PATCH_LEVEL);
+#else
+ Vemacs_patch_level = Qnil;
+#endif
+
+ DEFVAR_LISP ("emacs-beta-version", &Vemacs_beta_version /*
Beta number of this version of Emacs, as an integer.
The value is nil if this is an officially released version of XEmacs.
Warning: this variable does not exist in FSF Emacs or in XEmacs versions
#ifndef XEMACS_CODENAME
#define XEMACS_CODENAME "Noname"
#endif
- Vxemacs_codename = Fpurecopy (build_string (XEMACS_CODENAME));
+ Vxemacs_codename = build_string (XEMACS_CODENAME);
DEFVAR_BOOL ("noninteractive", &noninteractive1 /*
Non-nil means XEmacs is running without interactive terminal.
inhibit_site_lisp = 1;
#endif
+ DEFVAR_BOOL ("inhibit-site-modules", &inhibit_site_modules /*
+Set to non-nil when site-modules should not be searched at startup.
+*/ );
+#ifdef INHIBIT_SITE_MODULES
+ inhibit_site_modules = 1;
+#endif
+
DEFVAR_INT ("emacs-priority", &emacs_priority /*
Priority for XEmacs to run at.
This value is effective only if set before XEmacs is dumped,
Vinternal_error_checking = Fcons (intern ("bufpos"),
Vinternal_error_checking);
#endif
- Vinternal_error_checking = Fpurecopy (Vinternal_error_checking);
+
+ DEFVAR_CONST_LISP ("mail-lock-methods", &Vmail_lock_methods /*
+Mail spool locking methods supported by this instance of XEmacs.
+This is a list of symbols. Each of the symbols is one of the
+following: dot, lockf, flock, locking, mmdf.
+*/ );
+ {
+ Vmail_lock_methods = Qnil;
+ Vmail_lock_methods = Fcons (intern ("dot"), Vmail_lock_methods);
+#ifdef HAVE_LOCKF
+ Vmail_lock_methods = Fcons (intern ("lockf"), Vmail_lock_methods);
+#endif
+#ifdef HAVE_FLOCK
+ Vmail_lock_methods = Fcons (intern ("flock"), Vmail_lock_methods);
+#endif
+#ifdef HAVE_MMDF
+ Vmail_lock_methods = Fcons (intern ("mmdf"), Vmail_lock_methods);
+#endif
+#ifdef HAVE_LOCKING
+ Vmail_lock_methods = Fcons (intern ("locking"), Vmail_lock_methods);
+#endif
+ }
+
+ DEFVAR_CONST_LISP ("configure-mail-lock-method", &Vconfigure_mail_lock_method /*
+Mail spool locking method suggested by configure. This is one
+of the symbols in MAIL-LOCK-METHODS.
+*/ );
+ {
+#if defined(MAIL_LOCK_FLOCK) && defined(HAVE_FLOCK)
+ Vconfigure_mail_lock_method = intern("flock");
+#elif defined(MAIL_LOCK_LOCKF) && defined(HAVE_LOCKF)
+ Vconfigure_mail_lock_method = intern("lockf");
+#elif defined(MAIL_LOCK_MMDF) && defined(HAVE_MMDF)
+ Vconfigure_mail_lock_method = intern("mmdf");
+#elif defined(MAIL_LOCK_LOCKING) && defined(HAVE_LOCKING)
+ Vconfigure_mail_lock_method = intern("locking");
+#else
+ Vconfigure_mail_lock_method = intern("dot");
+#endif
+ }
DEFVAR_LISP ("path-separator", &Vpath_separator /*
The directory separator in search paths, as a string.
Vconfigure_lisp_directory = Qnil;
#endif
+ DEFVAR_LISP ("module-directory", &Vmodule_directory /*
+*Directory of core dynamic modules that come with XEmacs.
+*/ );
+ Vmodule_directory = Qnil;
+
+ DEFVAR_LISP ("configure-module-directory", &Vconfigure_module_directory /*
+For internal use by the build procedure only.
+configure's idea of what MODULE-DIRECTORY will be.
+*/ );
+#ifdef PATH_MODULESEARCH
+ Vconfigure_module_directory = Ffile_name_as_directory
+ (build_string ((char *) PATH_MODULESEARCH));
+#else
+ Vconfigure_module_directory = Qnil;
+#endif
+
DEFVAR_LISP ("configure-package-path", &Vconfigure_package_path /*
For internal use by the build procedure only.
configure's idea of what the package path will be.
Vconfigure_site_directory = Qnil;
#endif
+ DEFVAR_LISP ("site-module-directory", &Vsite_module_directory /*
+*Directory of site-specific loadable modules that come with XEmacs.
+*/ );
+ Vsite_module_directory = Qnil;
+
+ DEFVAR_LISP ("configure-site-module-directory", &Vconfigure_site_module_directory /*
+For internal use by the build procedure only.
+configure's idea of what SITE-DIRECTORY will be.
+*/ );
+#ifdef PATH_SITE_MODULES
+ Vconfigure_site_module_directory = Ffile_name_as_directory
+ (build_string ((char *) PATH_SITE_MODULES));
+#else
+ Vconfigure_site_module_directory = Qnil;
+#endif
+
DEFVAR_LISP ("doc-directory", &Vdoc_directory /*
*Directory containing the DOC file that comes with XEmacs.
This is usually the same as exec-directory.
#endif
}
-#ifdef __sgi
+#if defined(__sgi) && !defined(PDUMP)
/* This is so tremendously ugly I'd puke. But then, it works.
* The target is to override the static constructor from the
* libiflPNG.so library which is maskerading as libz, and
* cores on us when re-started from the dumped executable.
* This will have to go for 21.1 -- OG.
*/
+void __sti__iflPNGFile_c___(void);
void __sti__iflPNGFile_c___()
{
}