This commit was generated by cvs2svn to compensate for changes in r5197,
[chise/xemacs-chise.git.1] / src / emacs.c
index b581b51..5114354 100644 (file)
@@ -35,19 +35,14 @@ Boston, MA 02111-1307, USA.  */
 #include "commands.h"
 #include "console.h"
 #include "process.h"
-#include "redisplay.h"
-#include "frame.h"
 #include "sysdep.h"
 
+#include <setjmp.h>
 #include "syssignal.h" /* Always include before systty.h */
 #include "systty.h"
 #include "sysfile.h"
 #include "systime.h"
 
-#ifdef QUANTIFY
-#include <quantify.h>
-#endif
-
 #ifdef HAVE_SHLIB
 #include "sysdll.h"
 #endif
@@ -61,6 +56,12 @@ Boston, MA 02111-1307, USA.  */
 #include TT_C_H_PATH
 #endif
 
+#ifdef APOLLO
+#ifndef APOLLO_SR10
+#include <default_acl.h>
+#endif
+#endif
+
 #if defined (WINDOWSNT)
 #include <windows.h>
 #endif
@@ -68,11 +69,7 @@ Boston, MA 02111-1307, USA.  */
 /* For PATH_EXEC */
 #include <paths.h>
 
-#ifdef HEAP_IN_DATA
-void report_sheap_usage (int die_if_pure_storage_exceeded);
-#endif
-
-#if !defined (SYSTEM_MALLOC) && !defined (DOUG_LEA_MALLOC)
+#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 *);
@@ -110,7 +107,6 @@ Lisp_Object Vsystem_configuration_options;
 /* 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
@@ -139,18 +135,15 @@ Lisp_Object Vemacs_program_name, Vemacs_program_version;
 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 Vconfigure_info_directory;
+Lisp_Object Vinfo_directory, 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. */
@@ -171,7 +164,7 @@ int display_arg;
 /* 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. */
@@ -204,9 +197,6 @@ int noninteractive1;
 /* 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;
 
@@ -217,16 +207,16 @@ int inhibit_autoloads;
 int debug_paths;
 
 /* Save argv and argc.  */
-static char **initial_argv;
-static int initial_argc;
+char **initial_argv;
+int initial_argc;
 
 static void sort_args (int argc, char **argv);
 
+extern int always_gc;           /* hack */
+
 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;
@@ -256,7 +246,7 @@ fatal_error_signal (int sig)
 # 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];
@@ -275,7 +265,7 @@ fatal_error_signal (int sig)
 \f
 
 DOESNT_RETURN
-fatal (const char *fmt, ...)
+fatal (CONST char *fmt, ...)
 {
   va_list args;
   va_start (args, fmt);
@@ -300,7 +290,7 @@ fatal (const char *fmt, ...)
    GETTEXT on the format string. */
 
 int
-stderr_out (const char *fmt, ...)
+stderr_out (CONST char *fmt, ...)
 {
   int retval;
   va_list args;
@@ -317,7 +307,7 @@ stderr_out (const char *fmt, ...)
    GETTEXT on the format string. */
 
 int
-stdout_out (const char *fmt, ...)
+stdout_out (CONST char *fmt, ...)
 {
   int retval;
   va_list args;
@@ -365,7 +355,7 @@ make_arg_list_1 (int argc, char **argv, int skip_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, Qfile_name),
+             result = Fcons (build_ext_string (full_exe_path, FORMAT_FILENAME),
                              result);
 #if defined(HAVE_SHLIB)
              (void)dll_init(full_exe_path);
@@ -373,8 +363,7 @@ make_arg_list_1 (int argc, char **argv, int skip_args)
            }
          else
 #endif
-           result = Fcons (build_ext_string (argv [i], Qfile_name),
-                           result);
+           result = Fcons (build_ext_string (argv [i], FORMAT_FILENAME), result);
        }
     }
   return result;
@@ -398,12 +387,10 @@ make_argc_argv (Lisp_Object argv_list, int *argc, char ***argv)
 
   for (i = 0, next = argv_list; i < n; i++, next = XCDR (next))
     {
-      const char *temp;
+      CONST char *temp;
       CHECK_STRING (XCAR (next));
 
-      TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (next),
-                         C_STRING_ALLOCA, temp,
-                         Qnative);
+      GET_C_STRING_EXT_DATA_ALLOCA (XCAR (next), FORMAT_OS, temp);
       (*argv) [i] = xstrdup (temp);
     }
   (*argv) [n] = 0;
@@ -458,7 +445,7 @@ Return the directory name in which the Emacs executable was located.
 #endif
 
 #if defined (MULE) && defined (MSDOS) && defined (EMX)
-/* Setup all of files be input/output'ed with binary translation mode. */
+/* Setup all of files be input/output'ed with binary translation mdoe. */
 asm (" .text");
 asm ("L_setbinmode:");
 asm (" movl    $1, __fmode_bin");
@@ -532,10 +519,7 @@ argmatch (char **argv, int argc, char *sstr, char *lstr,
 /* Make stack traces always identify version + configuration */
 #define main_1 STACK_TRACE_EYE_CATCHER
 
-/* This function is not static, so that the compiler is less likely to
-   inline it, which would make it not show up in stack traces.  */
-DECLARE_DOESNT_RETURN (main_1 (int, char **, char **, int));
-DOESNT_RETURN
+static DOESNT_RETURN
 main_1 (int argc, char **argv, char **envp, int restart)
 {
   char stack_bottom_variable;
@@ -546,8 +530,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
   extern int malloc_cookie;
 #endif
 
-#if (!defined (SYSTEM_MALLOC) && !defined (HAVE_LIBMCHECK)     \
-     && !defined (DOUG_LEA_MALLOC))
+#if !defined(SYSTEM_MALLOC) && !defined(HAVE_LIBMCHECK)
   /* 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, */
@@ -555,7 +538,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
   __malloc_hook = NULL;
   __realloc_hook = NULL;
   __free_hook = NULL;
-#endif /* not SYSTEM_MALLOC or HAVE_LIBMCHECK or DOUG_LEA_MALLOC */
+#endif /* not SYSTEM_MALLOC */
 
   noninteractive = 0;
 
@@ -587,6 +570,22 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
   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
@@ -601,12 +600,18 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
   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 ();
-#elif defined (REL_ALLOC) && !defined(DOUG_LEA_MALLOC)
-  if (initialized)
-    init_ralloc();
 #endif
 
 #ifdef HAVE_SOCKS
@@ -692,16 +697,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
       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))
     {
@@ -830,22 +825,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
      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
@@ -857,7 +836,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
       /* Initialize Qnil, Qt, Qunbound, and the
         obarray.  After this, symbols can be
-        interned.  This depends on init_alloc_once_early(). */
+        interned.  This depends on init_alloc_once(). */
       init_symbols_once_early ();
 
       /* Declare the basic symbols pertaining to errors,
@@ -872,7 +851,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
         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()
@@ -883,6 +861,9 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
       syms_of_abbrev ();
       syms_of_alloc ();
+#ifdef HAVE_X_WINDOWS
+      syms_of_balloon_x ();
+#endif
       syms_of_buffer ();
       syms_of_bytecode ();
       syms_of_callint ();
@@ -896,21 +877,20 @@ main_1 (int argc, char **argv, char **envp, int restart)
       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 ();
       syms_of_emacs ();
       syms_of_eval ();
-#ifdef HAVE_X_WINDOWS
-      syms_of_event_Xt ();
-#endif
 #ifdef HAVE_DRAGNDROP
       syms_of_dragdrop ();
 #endif
@@ -929,11 +909,9 @@ main_1 (int argc, char **argv, char **envp, int restart)
       syms_of_general ();
       syms_of_glyphs ();
       syms_of_glyphs_eimage ();
-      syms_of_glyphs_widget ();
 #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 ();
@@ -948,9 +926,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
       syms_of_menubar ();
 #endif
       syms_of_minibuf ();
-#ifdef HAVE_SHLIB
-      syms_of_module ();
-#endif
       syms_of_objects ();
       syms_of_print ();
 #if !defined (NO_SUBPROCESSES)
@@ -966,7 +941,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
       syms_of_rangetab ();
       syms_of_redisplay ();
       syms_of_search ();
-      syms_of_select ();
       syms_of_signal ();
       syms_of_sound ();
       syms_of_specifier ();
@@ -987,38 +961,32 @@ main_1 (int argc, char **argv, char **envp, int restart)
       syms_of_device_tty ();
       syms_of_objects_tty ();
 #endif
-
 #ifdef HAVE_X_WINDOWS
-      syms_of_balloon_x ();
       syms_of_device_x ();
 #ifdef HAVE_DIALOGS
       syms_of_dialog_x ();
 #endif
+      syms_of_event_Xt ();
       syms_of_frame_x ();
       syms_of_glyphs_x ();
       syms_of_objects_x ();
 #ifdef HAVE_MENUBARS
       syms_of_menubar_x ();
 #endif
-      syms_of_select_x ();
+      syms_of_xselect ();
 #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_console_mswindows ();
       syms_of_device_mswindows ();
+      syms_of_event_mswindows ();
       syms_of_frame_mswindows ();
       syms_of_objects_mswindows ();
       syms_of_select_mswindows ();
       syms_of_glyphs_mswindows ();
-      syms_of_gui_mswindows ();
 #ifdef HAVE_MENUBARS
       syms_of_menubar_mswindows ();
 #endif
@@ -1028,9 +996,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
 #ifdef HAVE_MSW_C_DIRED
       syms_of_dired_mswindows ();
 #endif
-#ifdef WINDOWSNT
-      syms_of_ntproc ();
-#endif
 #endif /* HAVE_MS_WINDOWS */
 
 #ifdef MULE
@@ -1039,7 +1004,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
       syms_of_mule_charset ();
 #endif
 #ifdef FILE_CODING
-      syms_of_file_coding ();
+      syms_of_mule_coding ();
 #endif
 #ifdef MULE
 #ifdef HAVE_WNN
@@ -1058,6 +1023,10 @@ main_1 (int argc, char **argv, char **envp, int restart)
       SYMS_MACHINE;
 #endif
 
+#ifdef EMACS_BTL
+      syms_of_btl ();
+#endif
+
       /*
 #if defined (GNU_MALLOC) && \
     defined (ERROR_CHECK_MALLOC) && \
@@ -1080,10 +1049,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
       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. */
@@ -1115,7 +1080,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
       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
@@ -1139,7 +1103,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
       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
@@ -1167,7 +1130,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
       specifier_type_create ();
 
       specifier_type_create_image ();
-      specifier_type_create_gutter ();
       specifier_type_create_objects ();
 #ifdef HAVE_TOOLBARS
       specifier_type_create_toolbar ();
@@ -1187,7 +1149,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
       structure_type_create_chartab ();
       structure_type_create_faces ();
       structure_type_create_rangetab ();
-      structure_type_create_hash_table ();
+      structure_type_create_hashtable ();
 
       /* Now initialize the image instantiator formats and associated symbols.
          Other than the first function below, the functions may
@@ -1202,10 +1164,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
       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 */
@@ -1223,12 +1181,12 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
       lstream_type_create ();
 #ifdef FILE_CODING
-      lstream_type_create_file_coding ();
+      lstream_type_create_mule_coding ();
 #endif
 #if defined (HAVE_MS_WINDOWS) && !defined(HAVE_MSG_SELECT)
       lstream_type_create_mswindows_selectable ();
 #endif
-
+      
       /* Initialize processes implementation.
         The functions may make exactly the following function/macro calls:
 
@@ -1254,7 +1212,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
         staticpro()
         Fprovide(symbol)
         intern()
-        Fput()
+        pure_put()
         xmalloc()
         defsymbol(), if it's absolutely necessary and you're sure that
           the symbol isn't referenced anywhere else in the initialization
@@ -1267,6 +1225,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
         Any of the object-creating functions on alloc.c: e.g.
 
         make_pure_*()
+        Fpurecopy()
         make_string()
         build_string()
         make_vector()
@@ -1276,6 +1235,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
         Fcons()
         listN()
         make_opaque_ptr()
+        make_opaque_long()
 
         perhaps a few others.
        */
@@ -1283,23 +1243,21 @@ main_1 (int argc, char **argv, char **envp, int restart)
       /* 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 ();
@@ -1315,32 +1273,22 @@ main_1 (int argc, char **argv, char **envp, int restart)
       vars_of_elhash ();
       vars_of_emacs ();
       vars_of_eval ();
-
-#ifdef HAVE_X_WINDOWS
-      vars_of_event_Xt ();
-#endif
-#if defined(HAVE_TTY) && (defined (DEBUG_TTY_EVENT_STREAM) || !defined (HAVE_X_WINDOWS))
-      vars_of_event_tty ();
-#endif
-#ifdef HAVE_MS_WINDOWS
-      vars_of_event_mswindows ();
-#endif
       vars_of_event_stream ();
-
       vars_of_events ();
       vars_of_extents ();
       vars_of_faces ();
       vars_of_fileio ();
+#ifdef CLASH_DETECTION
+      vars_of_filelock ();
+#endif
       vars_of_floatfns ();
       vars_of_font_lock ();
       vars_of_frame ();
       vars_of_glyphs ();
       vars_of_glyphs_eimage ();
-      vars_of_glyphs_widget ();
 #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 ();
@@ -1363,13 +1311,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
       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 ();
 
@@ -1392,8 +1333,8 @@ main_1 (int argc, char **argv, char **envp, int restart)
       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
@@ -1404,34 +1345,36 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
 #ifdef HAVE_TTY
       vars_of_console_tty ();
+      vars_of_event_tty ();
       vars_of_frame_tty ();
       vars_of_objects_tty ();
 #endif
 
 #ifdef HAVE_X_WINDOWS
-      vars_of_balloon_x ();
       vars_of_device_x ();
 #ifdef HAVE_DIALOGS
       vars_of_dialog_x ();
 #endif
+      vars_of_event_Xt ();
       vars_of_frame_x ();
       vars_of_glyphs_x ();
 #ifdef HAVE_MENUBARS
       vars_of_menubar_x ();
 #endif
       vars_of_objects_x ();
-      vars_of_select_x ();
+      vars_of_xselect ();
 #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 /* HAVE_X_WINDOWS */
+#endif
 
 #ifdef HAVE_MS_WINDOWS
       vars_of_device_mswindows ();
       vars_of_console_mswindows ();
+      vars_of_event_mswindows ();
       vars_of_frame_mswindows ();
       vars_of_objects_mswindows ();
       vars_of_select_mswindows ();
@@ -1452,11 +1395,10 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
 #ifdef MULE
       vars_of_mule ();
-      vars_of_mule_ccl ();
       vars_of_mule_charset ();
 #endif
 #ifdef FILE_CODING
-      vars_of_file_coding ();
+      vars_of_mule_coding ();
 #endif
 #ifdef MULE
 #ifdef HAVE_WNN
@@ -1479,10 +1421,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
       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.
@@ -1498,7 +1436,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
         */
 
       specifier_vars_of_glyphs ();
-      specifier_vars_of_gutter ();
 #ifdef HAVE_MENUBARS
       specifier_vars_of_menubar ();
 #endif
@@ -1521,19 +1458,19 @@ main_1 (int argc, char **argv, char **envp, int restart)
       /* Calls Fmake_range_table(). */
       complex_vars_of_search ();
 
-      /* Calls make_lisp_hash_table(). */
+      /* Calls make_lisp_hashtable(). */
       complex_vars_of_extents ();
 
-      /* Depends on hash tables and specifiers. */
+      /* Depends on hashtables and specifiers. */
       complex_vars_of_faces ();
 
 #ifdef MULE
-      /* These two depend on hash tables and various variables declared
+      /* These two depend on hashtables and various variables declared
         earlier.  The second may also depend on the first. */
       complex_vars_of_mule_charset ();
 #endif
-#ifdef FILE_CODING
-      complex_vars_of_file_coding ();
+#if defined(FILE_CODING)
+      complex_vars_of_mule_coding ();
 #endif
 
       /* This calls allocate_glyph(), which creates specifiers
@@ -1598,134 +1535,22 @@ main_1 (int argc, char **argv, char **envp, int restart)
         might depend on all sorts of things; I'm not sure. */
       complex_vars_of_emacs ();
 
+#ifdef CLASH_DETECTION
+      complex_vars_of_filelock ();
+#endif /* CLASH_DETECTION */
+
       /* This creates a couple of basic keymaps and depends on Lisp
-        hash tables and Ffset() (both of which depend on some variables
+        hashtables and Ffset() (both of which depend on some variables
         initialized in the vars_of_*() section) and possibly other
         stuff. */
       complex_vars_of_keymap ();
-
-      /* Calls make_lisp_hash_table() and creates a keymap */
+      /* Calls Fmake_hashtable() and creates a keymap */
       complex_vars_of_event_stream ();
 
-#ifdef ERROR_CHECK_GC
-      {
-       extern int always_gc;
-       if (always_gc)                /* purification debugging hack */
-         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 */
+      if (always_gc)                /* purification debugging hack */
+       garbage_collect_1 ();
     }
 
-
   /* CONGRATULATIONS!!!  We have successfully initialized the Lisp
      engine. */
 
@@ -1753,7 +1578,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
 #ifdef WINDOWSNT
   /*
    * For Win32, call init_environment() now, so that environment/registry
-   * variables will be properly entered into Vprocess_environment.
+   * variables will be properly entered into Vprocess_envonment.
    */
   init_environment();
 #endif
@@ -1780,7 +1605,6 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
   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 */
@@ -1818,8 +1642,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
     else
       {
        Vinvocation_path = decode_env_path ("PATH", NULL);
-       locate_file (Vinvocation_path, Vinvocation_name,
-                    Vlisp_EXEC_SUFFIXES,
+       locate_file (Vinvocation_path, Vinvocation_name, EXEC_SUFFIXES,
                     &Vinvocation_directory, X_OK);
       }
 
@@ -1838,11 +1661,11 @@ main_1 (int argc, char **argv, char **envp, int restart)
     char *buf = (char *)alloca (XSTRING_LENGTH (Vinvocation_directory)
                                + XSTRING_LENGTH (Vinvocation_name)
                                + 2);
-    sprintf (buf, "%s/%s", XSTRING_DATA (Vinvocation_directory),
-            XSTRING_DATA (Vinvocation_name));
+    sprintf (buf, "%s/%s", XSTRING_DATA(Vinvocation_directory),
+            XSTRING_DATA(Vinvocation_name));
 
     /* All we can do is cry if an error happens, so ignore it. */
-    (void) dll_init (buf);
+    (void)dll_init(buf);
   }
 #endif
 
@@ -1888,13 +1711,13 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
 struct standard_args
 {
-  const char *name;
-  const char *longname;
+  CONST char * CONST name;
+  CONST char * CONST longname;
   int priority;
   int nargs;
 };
 
-static const struct standard_args standard_args[] =
+static struct standard_args standard_args[] =
 {
   /* Handled by main_1 above: */
   { "-nl", "--no-shared-memory", 100, 0 },
@@ -1972,7 +1795,7 @@ static const struct standard_args standard_args[] =
 static void
 sort_args (int argc, char **argv)
 {
-  char **new_argv = xnew_array (char *, argc);
+  char **new = xnew_array (char *, argc);
   /* For each element of argv,
      the corresponding element of options is:
      0 for an option that takes no arguments,
@@ -2052,8 +1875,8 @@ sort_args (int argc, char **argv)
        }
     }
 
-  /* Copy the arguments, in order of decreasing priority, to NEW_ARGV.  */
-  new_argv[0] = argv[0];
+  /* Copy the arguments, in order of decreasing priority, to NEW.  */
+  new[0] = argv[0];
   while (to < argc)
     {
       int best = -1;
@@ -2076,10 +1899,10 @@ sort_args (int argc, char **argv)
       if (best < 0)
        abort ();
 
-      /* Copy the highest priority remaining option, with its args, to NEW_ARGV.  */
-      new_argv[to++] = argv[best];
+      /* Copy the highest priority remaining option, with its args, to NEW.  */
+      new[to++] = argv[best];
       for (i = 0; i < options[best]; i++)
-       new_argv[to++] = argv[best + i + 1];
+       new[to++] = argv[best + i + 1];
 
       /* Clear out this option in ARGV.  */
       argv[best] = 0;
@@ -2087,10 +1910,7 @@ sort_args (int argc, char **argv)
        argv[best + i + 1] = 0;
     }
 
-  memcpy (argv, new_argv, sizeof (char *) * argc);
-  xfree (new_argv);
-  xfree (options);
-  xfree (priority);
+  memcpy (argv, new, sizeof (char *) * argc);
 }
 
 static JMP_BUF run_temacs_catch;
@@ -2122,17 +1942,15 @@ Do not call this.  It will reinitialize your XEmacs.  You'll be sorry.
    a dumped version in case you want to rerun it.  This function is most
    useful when used as part of the `make all-elc' command. --ben]
    This will "restart" emacs with the specified command-line arguments.
-
-   Martin thinks this function is most useful when using debugging
-   tools like Purify or tcov that get confused by XEmacs' dumping.  */
+ */
      (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);
@@ -2143,22 +1961,21 @@ Do not call this.  It will reinitialize your XEmacs.  You'll be sorry.
   /* Need to convert the orig_invoc_name and all of the arguments
      to external format. */
 
-  TO_EXTERNAL_FORMAT (LISP_STRING, orig_invoc_name,
-                     ALLOCA, (wampum, namesize),
-                     Qnative);
+  GET_STRING_EXT_DATA_ALLOCA (orig_invoc_name, FORMAT_OS, wampum,
+                             namesize);
   namesize++;
 
   for (ac = 0, total_len = namesize; ac < nargs; ac++)
     {
       CHECK_STRING (args[ac]);
-      TO_EXTERNAL_FORMAT (LISP_STRING, args[ac],
-                         ALLOCA, (wampum_all[ac], wampum_all_len[ac]),
-                         Qnative);
+      GET_STRING_EXT_DATA_ALLOCA (args[ac], FORMAT_OS,
+                                 wampum_all[ac],
+                                 wampum_all_len[ac]);
       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+2, char *);
+  DO_REALLOC (run_temacs_argv, run_temacs_argv_size, nargs+1, char *);
 
   memcpy (run_temacs_args, wampum, namesize);
   run_temacs_argv [0] = run_temacs_args;
@@ -2175,8 +1992,10 @@ Do not call this.  It will reinitialize your XEmacs.  You'll be sorry.
   unbind_to (0, Qnil); /* this closes loadup.el */
   purify_flag = 0;
   run_temacs_argc = nargs + 1;
-#ifdef HEAP_IN_DATA
-  report_sheap_usage (0);
+#ifdef REPORT_PURE_USAGE
+  report_pure_usage (1, 0);
+#else
+  report_pure_usage (0, 0);
 #endif
   LONGJMP (run_temacs_catch, 1);
   return Qnil; /* not reached; warning suppression */
@@ -2189,33 +2008,28 @@ main (int argc, char **argv, char **envp)
   int     volatile vol_argc = argc;
   char ** volatile vol_argv = argv;
   char ** volatile vol_envp = envp;
-  /* This is hairy.  We need to compute where the XEmacs binary was invoked
-     from because temacs initialization requires it to find the lisp
-     directories.  The code that recomputes the path is guarded by the
-     restarted flag.  There are three possible paths I've found so far
-     through this:
-
-     temacs -- When running temacs for basic build stuff, the first main_1
-      will be the only one invoked.  It must compute the path else there
-      will be a very ugly bomb in startup.el (can't find obvious location
-      for doc-directory data-directory, etc.).
-
-     temacs w/ run-temacs on the command line -- This is run to bytecompile
-      all the out of date dumped lisp.  It will execute both of the main_1
-      calls and the second one must not touch the first computation because
-      argc/argv are hosed the second time through.
-
-     xemacs -- Only the second main_1 is executed.  The invocation path must
-      computed but this only matters when running in place or when running
-      as a login shell.
-
-     As a bonus for straightening this out, XEmacs can now be run in place
-     as a login shell.  This never used to work.
-
-     As another bonus, we can now guarantee that
-     (concat invocation-directory invocation-name) contains the filename
-     of the XEmacs binary we are running.  This can now be used in a
-     definite test for out of date dumped files.  -slb */
+  /* This is hairy.  We need to compute where the XEmacs binary was invoked */
+  /* from because temacs initialization requires it to find the lisp */
+  /* directories.  The code that recomputes the path is guarded by the */
+  /* restarted flag.  There are three possible paths I've found so far */
+  /* through this: */
+  /* temacs -- When running temacs for basic build stuff, the first main_1 */
+  /*  will be the only one invoked.  It must compute the path else there */
+  /*  will be a very ugly bomb in startup.el (can't find obvious location */
+  /*  for doc-directory data-directory, etc.).  */
+  /* temacs w/ run-temacs on the command line -- This is run to bytecompile */
+  /*  all the out of date dumped lisp.  It will execute both of the main_1 */
+  /*  calls and the second one must not touch the first computation because */
+  /*  argc/argv are hosed the second time through. */
+  /* xemacs -- Only the second main_1 is executed.  The invocation path must */
+  /*  computed but this only matters when running in place or when running */
+  /*  as a login shell. */
+  /* As a bonus for straightening this out, XEmacs can now be run in place */
+  /*  as a login shell.  This never used to work. */
+  /* As another bonus, we can now guarantee that */
+  /* (concat invocation-directory invocation-name) contains the filename */
+  /* of the XEmacs binary we are running.  This can now be used in a */
+  /* definite test for out of date dumped files.  -slb */
   int restarted = 0;
 #ifdef QUANTIFY
   quantify_stop_recording_data ();
@@ -2270,7 +2084,7 @@ main (int argc, char **argv, char **envp)
     }
 #ifdef RUN_TIME_REMAP
   else
-    /* obviously no-one uses this because where it was before initialized was
+    /* obviously no-one uses this because where it was before initalized was
      *always* true */
     run_time_remap (argv[0]);
 #endif
@@ -2313,17 +2127,13 @@ main (int argc, char **argv, char **envp)
 /* GCC >= 2.8.  -slb */
 #if defined(GNU_MALLOC)
 static void
-voodoo_free_hook (void *mem)
+voodoo_free_hook(void *mem)
 {
   /* Disable all calls to free() when XEmacs is exiting and it doesn't */
   /* matter. */
-  __free_hook =
-#ifdef __GNUC__ /* prototype of __free_hook varies with glibc version */
-    (__typeof__ (__free_hook))
-#endif
-    voodoo_free_hook;
+  __free_hook = voodoo_free_hook;
 }
-#endif /* GNU_MALLOC */
+#endif
 
 DEFUN ("kill-emacs", Fkill_emacs, 0, 1, "P", /*
 Exit the XEmacs job and kill it.  Ask for confirmation, without argument.
@@ -2377,17 +2187,13 @@ all of which are called before XEmacs is actually killed.
 
   UNGCPRO;
 
-  shut_down_emacs (0, STRINGP (arg) ? arg : Qnil);
+  shut_down_emacs (0, ((STRINGP (arg)) ? arg : Qnil));
 
 #if defined(GNU_MALLOC)
-  __free_hook =
-#ifdef __GNUC__ /* prototype of __free_hook varies with glibc version */
-    (__typeof__ (__free_hook))
-#endif
-    voodoo_free_hook;
+  __free_hook = 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 */
 }
@@ -2443,16 +2249,12 @@ shut_down_emacs (int sig, Lisp_Object stuff)
        ("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
-        "Otherwise, please report this bug by selecting `Report-Bug'\n"
-         "in the InfoDock menu.\n"
+        "Please report this bug by selecting `Report-Bug' in the InfoDock\n"
+        "menu.\n"
 #else
-        "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"
+        "Please report this bug by running the send-pr script included\n"
+        "with XEmacs, or selecting `Send Bug Report' 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"
@@ -2467,17 +2269,17 @@ shut_down_emacs (int sig, Lisp_Object stuff)
         "\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 (STRINGP (Vinvocation_name))
+       if (GC_STRINGP (Vinvocation_name))
          name = (char *) XSTRING_DATA (Vinvocation_name);
        else
          name = "xemacs";
-       if (STRINGP (Vinvocation_directory))
+       if (GC_STRINGP (Vinvocation_directory))
          dir = (char *) XSTRING_DATA (Vinvocation_directory);
        if (!dir || dir[0] != '/')
          stderr_out ("`which %s`", name);
@@ -2514,11 +2316,50 @@ shut_down_emacs (int sig, Lisp_Object stuff)
 
 \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, /*
@@ -2544,6 +2385,8 @@ and announce itself normally when it is run.
   /* When we're dumping, we can't use the debugging free() */
   disable_free_hook ();
 #endif
+#if 1 /* martin */
+#endif
 
   CHECK_STRING (intoname);
   intoname = Fexpand_file_name (intoname, Qnil);
@@ -2559,12 +2402,12 @@ and announce itself normally when it is run.
   opurify = purify_flag;
   purify_flag = 0;
 
-#ifdef HEAP_IN_DATA
-  report_sheap_usage (1);
+#ifdef DEBUG_XEMACS
+  report_pure_usage (1, 1);
+#else
+  report_pure_usage (0, 1);
 #endif
 
-  clear_message ();
-
   fflush (stderr);
   fflush (stdout);
 
@@ -2595,23 +2438,13 @@ and announce itself normally when it is run.
     char *intoname_ext;
     char *symname_ext;
 
-    TO_EXTERNAL_FORMAT (LISP_STRING, intoname,
-                       C_STRING_ALLOCA, intoname_ext,
-                       Qfile_name);
-
+    GET_C_STRING_FILENAME_DATA_ALLOCA (intoname, intoname_ext);
     if (STRINGP (symname))
-      TO_EXTERNAL_FORMAT (LISP_STRING, symname,
-                         C_STRING_ALLOCA, symname_ext,
-                         Qfile_name);
+      GET_C_STRING_FILENAME_DATA_ALLOCA (symname, symname_ext);
     else
       symname_ext = 0;
 
     garbage_collect_1 ();
-
-#ifdef PDUMP
-    pdump ();
-#else
-
 #ifdef DOUG_LEA_MALLOC
     malloc_state_ptr = malloc_get_state ();
 #endif
@@ -2620,12 +2453,11 @@ and announce itself normally when it is run.
      It's a whole lot easier to do the conversion here than to
      modify all the unexec routines to ensure that filename
      conversion is applied everywhere.  Don't worry about memory
-     leakage because this call only happens once. */
-    unexec (intoname_ext, symname_ext, (uintptr_t) my_edata, 0, 0);
+     leakage because this call only happens once. */ 
+ unexec (intoname_ext, symname_ext, (uintptr_t) my_edata, 0, 0);
 #ifdef DOUG_LEA_MALLOC
-    free (malloc_state_ptr);
+  free (malloc_state_ptr);
 #endif
-#endif /* not PDUMP */
   }
 #endif /* not MSDOS and EMX */
 
@@ -2634,6 +2466,8 @@ and announce itself normally when it is run.
   return Qnil;
 }
 
+#endif /* not HAVE_SHM */
+
 #endif /* not CANNOT_DUMP */
 \f
 #ifndef SEPCHAR
@@ -2643,15 +2477,15 @@ and announce itself normally when it is run.
 /* 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)
@@ -2671,32 +2505,33 @@ split_string_by_emchar_1 (const Bufbyte *string, Bytecount size,
 }
 
 /* The same as the above, except PATH is an external C string (it is
-   converted using Qfile_name), and sepchar is hardcoded to SEPCHAR
+   converted as FORMAT_FILENAME), and sepchar is hardcoded to SEPCHAR
    (':' or whatever).  */
 Lisp_Object
-decode_path (const char *path)
+decode_path (CONST char *path)
 {
-  Bytecount newlen;
+  int len;
   Bufbyte *newpath;
   if (!path)
     return Qnil;
 
-  TO_INTERNAL_FORMAT (C_STRING, path, ALLOCA, (newpath, newlen), Qfile_name);
+  GET_C_CHARPTR_INT_FILENAME_DATA_ALLOCA (path, newpath);
 
+  len = strlen (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 (!newlen)
+  if (!len)
     return Qnil;
 
-  return split_string_by_emchar_1 (newpath, newlen, SEPCHAR);
+  return split_string_by_emchar_1 (newpath, (Bytecount)len, 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)
@@ -2759,7 +2594,7 @@ Non-nil return value means XEmacs is running without interactive terminal.
 /* 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);
@@ -2774,7 +2609,7 @@ assert_failed (const char *file, int line, const char *expr)
 
 #ifdef QUANTIFY
 DEFUN ("quantify-start-recording-data", Fquantify_start_recording_data,
-       0, 0, "", /*
+       0, 0, 0, /*
 Start recording Quantify data.
 */
        ())
@@ -2784,7 +2619,7 @@ Start recording Quantify data.
 }
 
 DEFUN ("quantify-stop-recording-data", Fquantify_stop_recording_data,
-       0, 0, "", /*
+       0, 0, 0, /*
 Stop recording Quantify data.
 */
        ())
@@ -2793,7 +2628,7 @@ Stop recording Quantify data.
   return Qnil;
 }
 
-DEFUN ("quantify-clear-data", Fquantify_clear_data, 0, 0, "", /*
+DEFUN ("quantify-clear-data", Fquantify_clear_data, 0, 0, 0, /*
 Clear all Quantify data.
 */
        ())
@@ -2807,7 +2642,11 @@ void
 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);
@@ -2878,7 +2717,7 @@ Symbol indicating type of operating system you are using.
   DEFVAR_LISP ("system-configuration", &Vsystem_configuration /*
 String naming the configuration XEmacs was built for.
 */ );
-  Vsystem_configuration = build_string (EMACS_CONFIGURATION);
+  Vsystem_configuration = Fpurecopy (build_string (EMACS_CONFIGURATION));
 
 #ifndef EMACS_CONFIG_OPTIONS
 # define EMACS_CONFIG_OPTIONS "UNKNOWN"
@@ -2886,7 +2725,8 @@ String naming the configuration XEmacs was built for.
   DEFVAR_LISP ("system-configuration-options", &Vsystem_configuration_options /*
 String containing the configuration options XEmacs was built with.
 */ );
-  Vsystem_configuration_options = build_string (EMACS_CONFIG_OPTIONS);
+  Vsystem_configuration_options = Fpurecopy (build_string
+                                            (EMACS_CONFIG_OPTIONS));
 
   DEFVAR_LISP ("emacs-major-version", &Vemacs_major_version /*
 Major version number of this version of Emacs, as an integer.
@@ -2904,20 +2744,7 @@ Warning: this variable did not exist in Emacs versions earlier than:
 */ );
   Vemacs_minor_version = make_int (EMACS_MINOR_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 /*
+  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
@@ -2952,7 +2779,7 @@ Codename of this version of Emacs (a string).
 #ifndef XEMACS_CODENAME
 #define XEMACS_CODENAME "Noname"
 #endif
-  Vxemacs_codename = build_string (XEMACS_CODENAME);
+  Vxemacs_codename = Fpurecopy (build_string (XEMACS_CODENAME));
 
   DEFVAR_BOOL ("noninteractive", &noninteractive1 /*
 Non-nil means XEmacs is running without interactive terminal.
@@ -2977,13 +2804,6 @@ Set to non-nil when the site-lisp should not be searched at startup.
   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,
@@ -3026,46 +2846,7 @@ bufpos           - check buffer positions.
   Vinternal_error_checking = Fcons (intern ("bufpos"),
                                    Vinternal_error_checking);
 #endif
-
-  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
-  }
+  Vinternal_error_checking = Fpurecopy (Vinternal_error_checking);
 
   DEFVAR_LISP ("path-separator", &Vpath_separator /*
 The directory separator in search paths, as a string.
@@ -3080,7 +2861,7 @@ void
 complex_vars_of_emacs (void)
 {
   /* This is all related to path searching. */
-
+  
   DEFVAR_LISP ("emacs-program-name", &Vemacs_program_name /*
 *Name of the Emacs variant.
 For example, this may be \"xemacs\" or \"infodock\".
@@ -3134,22 +2915,6 @@ configure's idea of what LISP-DIRECTORY will be.
   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.
@@ -3214,22 +2979,6 @@ configure's idea of what SITE-DIRECTORY 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.
@@ -3292,14 +3041,13 @@ The configured initial path for info documentation.
 #endif
 }
 
-#if defined(__sgi) && !defined(PDUMP)
+#ifdef __sgi
 /* 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___()
 {
 }