X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Femacs.c;h=51143540cec9f303abcee269e43f931ea97bc3d3;hb=dfbb14255e8dbb613ee0c024c9ecbdc6a63dd45b;hp=60258afe204e3f0e7a27bf3477a5c68614a780c9;hpb=2fd9701a4f902054649dde9143a3f77809afee8f;p=chise%2Fxemacs-chise.git.1 diff --git a/src/emacs.c b/src/emacs.c index 60258af..5114354 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -35,28 +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 #include "syssignal.h" /* Always include before systty.h */ #include "systty.h" #include "sysfile.h" #include "systime.h" -#ifdef PDUMP -#include "dump-id.h" -#include "dumper.h" -#endif - -#ifndef SEPCHAR -#define SEPCHAR ':' -#endif - -#ifdef QUANTIFY -#include -#endif - #ifdef HAVE_SHLIB #include "sysdll.h" #endif @@ -70,6 +56,12 @@ Boston, MA 02111-1307, USA. */ #include TT_C_H_PATH #endif +#ifdef APOLLO +#ifndef APOLLO_SR10 +#include +#endif +#endif + #if defined (WINDOWSNT) #include #endif @@ -77,11 +69,7 @@ Boston, MA 02111-1307, USA. */ /* For PATH_EXEC */ #include -#if defined (HEAP_IN_DATA) && !defined(PDUMP) -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 *); @@ -119,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 @@ -148,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. */ @@ -180,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. */ @@ -213,33 +197,26 @@ 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; /* Nonzero means don't load package autoloads at startup */ int inhibit_autoloads; -/* Nonzero means don't load the dump file (ignored if not PDUMP) */ - -int nodumpfile; - /* Nonzero means print debug information about path searching */ 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; - /* Signal code for the fatal signal that was received */ static int fatal_error_code; @@ -247,14 +224,6 @@ static int fatal_error_code; /* Nonzero if handling a fatal error already */ static int fatal_error_in_progress; -static JMP_BUF run_temacs_catch; - -static int run_temacs_argc; -static char **run_temacs_argv; -static char *run_temacs_args; -static size_t run_temacs_argv_size; -static size_t run_temacs_args_size; - static void shut_down_emacs (int sig, Lisp_Object stuff); /* Handle bus errors, illegal instruction, etc. */ @@ -277,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]; @@ -295,6 +264,61 @@ fatal_error_signal (int sig) } +DOESNT_RETURN +fatal (CONST char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + + fprintf (stderr, "\nXEmacs: "); + vfprintf (stderr, GETTEXT (fmt), args); + fprintf (stderr, "\n"); + + va_end (args); + fflush (stderr); + exit (1); +} + +/* #### The following two functions should be replaced with + calls to emacs_doprnt_*() functions, with STREAM set to send out + to stdout or stderr. This is the only way to ensure that + I18N3 works properly (many implementations of the *printf() + functions, including the ones included in glibc, do not implement + the %###$ argument-positioning syntax). */ + +/* exactly equivalent to fprintf (stderr, fmt, ...) except that it calls + GETTEXT on the format string. */ + +int +stderr_out (CONST char *fmt, ...) +{ + int retval; + va_list args; + va_start (args, fmt); + + retval = vfprintf (stderr, GETTEXT (fmt), args); + + va_end (args); + /* fflush (stderr); */ + return retval; +} + +/* exactly equivalent to fprintf (stdout, fmt, ...) except that it calls + GETTEXT on the format string. */ + +int +stdout_out (CONST char *fmt, ...) +{ + int retval; + va_list args; + va_start (args, fmt); + + retval = vfprintf (stdout, GETTEXT (fmt), args); + + va_end (args); + return retval; +} + #ifdef SIGDANGER /* Handler for SIGDANGER. */ @@ -331,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); @@ -339,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; @@ -364,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; @@ -424,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"); @@ -498,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; @@ -512,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, */ @@ -521,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; @@ -535,7 +552,7 @@ main_1 (int argc, char **argv, char **envp, int restart) * But hey, it solves all NS related memory problems, so who's * complaining? */ if (initialized && malloc_jumpstart (malloc_cookie) != 0) - stderr_out ("malloc jumpstart failed!\n"); + fprintf (stderr, "malloc jumpstart failed!\n"); #endif /* NeXT */ /* @@ -553,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 @@ -567,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 @@ -611,17 +650,6 @@ main_1 (int argc, char **argv, char **envp, int restart) inhibit_window_system = 1; #endif - /* Handle the -sd/--show-dump-id switch, which means show the hex dump_id and quit */ - if (argmatch (argv, argc, "-sd", "--show-dump-id", 9, NULL, &skip_args)) - { -#ifdef PDUMP - printf ("%08x\n", dump_id); -#else - printf ("*ERROR**\n"); -#endif - exit (0); - } - /* Handle the -t switch, which specifies filename to use as terminal */ { char *term; @@ -643,12 +671,6 @@ main_1 (int argc, char **argv, char **envp, int restart) } } - /* Handle the --no-dump-file/-nd switch, which means don't load the dump file (ignored when not using pdump) */ - if (argmatch (argv, argc, "-nd", "--no-dump-file", 7, NULL, &skip_args)) - { - nodumpfile = 1; - } - /* Handle -nw switch */ if (argmatch (argv, argc, "-nw", "--no-windows", 6, NULL, &skip_args)) inhibit_window_system = 1; @@ -675,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)) { @@ -813,28 +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 if (nodumpfile) { - initialized = 0; - purify_flag = 1; - } else { - initialized = pdump_load (argv[0]); - if (initialized) - run_temacs_argc = -1; - else - purify_flag = 1; - } -#else - if (!initialized) - purify_flag = 1; -#endif - if (!initialized) { /* Initialize things so that new Lisp objects @@ -846,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, @@ -861,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() @@ -872,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 (); @@ -885,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 @@ -918,9 +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 (); - syms_of_gutter (); +#endif syms_of_indent (); syms_of_intl (); syms_of_keymap (); @@ -935,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) @@ -953,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 (); @@ -974,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 @@ -1015,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 @@ -1026,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 @@ -1045,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) && \ @@ -1067,14 +1049,6 @@ main_1 (int argc, char **argv, char **envp, int restart) syms_of_eldap (); #endif -#ifdef HAVE_GPM - syms_of_gpmevent (); -#endif - -#ifdef HAVE_POSTGRESQL - syms_of_postgresql (); -#endif - /* Now create the subtypes for the types that have them. We do this before the vars_*() because more symbols may get initialized here. */ @@ -1106,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 @@ -1130,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 @@ -1158,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 (); @@ -1178,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 @@ -1193,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 */ @@ -1214,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: @@ -1245,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 @@ -1255,9 +1222,10 @@ main_1 (int argc, char **argv, char **envp, int restart) using a global variable that has been initialized earlier on in the same function - Any of the object-creating functions in alloc.c: e.g. + Any of the object-creating functions on alloc.c: e.g. make_pure_*() + Fpurecopy() make_string() build_string() make_vector() @@ -1267,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. */ @@ -1274,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 (); @@ -1306,30 +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 (); - vars_of_gutter (); +#endif vars_of_indent (); vars_of_insdel (); vars_of_intl (); @@ -1352,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 (); @@ -1381,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 @@ -1393,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 (); @@ -1441,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 @@ -1468,14 +1421,6 @@ main_1 (int argc, char **argv, char **envp, int restart) vars_of_eldap (); #endif -#ifdef HAVE_POSTGRESQL - vars_of_postgresql(); -#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. @@ -1491,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 @@ -1514,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 @@ -1591,135 +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_fileio (); - 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. */ @@ -1747,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 @@ -1774,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 */ @@ -1788,7 +1618,7 @@ main_1 (int argc, char **argv, char **envp, int restart) #ifdef HAVE_TTY init_device_tty (); #endif - init_console_stream (restart); /* Create the first console */ + init_console_stream (); /* Create the first console */ /* try to get the actual pathname of the exec file we are running */ if (!restart) @@ -1812,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); } @@ -1832,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 @@ -1882,18 +1711,17 @@ 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: */ - { "-sd", "--show-dump-id", 105, 0 }, - { "-t", "--terminal", 100, 1 }, - { "-nd", "--no-dump-file", 95, 0 }, + { "-nl", "--no-shared-memory", 100, 0 }, + { "-t", "--terminal", 95, 1 }, { "-nw", "--no-windows", 90, 0 }, { "-batch", "--batch", 85, 0 }, { "-debug-paths", "--debug-paths", 82, 0 }, @@ -1967,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, @@ -2047,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; @@ -2071,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; @@ -2082,12 +1910,17 @@ 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; + +static int run_temacs_argc; +static char **run_temacs_argv; +static char *run_temacs_args; +static size_t run_temacs_argv_size; +static size_t run_temacs_args_size; + DEFUN ("running-temacs-p", Frunning_temacs_p, 0, 0, 0, /* True if running temacs. This means we are in the dumping stage. This is false during normal execution of the `xemacs' program, and @@ -2109,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); @@ -2130,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; @@ -2162,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; -#if defined (HEAP_IN_DATA) && !defined(PDUMP) - 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 */ @@ -2176,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 (); @@ -2257,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 @@ -2268,7 +2095,7 @@ main (int argc, char **argv, char **envp) int rc = malloc_set_state (malloc_state_ptr); if (rc != 0) { - stderr_out ("malloc_set_state failed, rc = %d\n", rc); + fprintf (stderr, "malloc_set_state failed, rc = %d\n", rc); abort (); } #if 0 @@ -2300,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. @@ -2364,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 */ } @@ -2430,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" @@ -2454,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); @@ -2501,11 +2316,50 @@ shut_down_emacs (int sig, Lisp_Object stuff) #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, /* @@ -2531,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); @@ -2546,12 +2402,12 @@ and announce itself normally when it is run. opurify = purify_flag; purify_flag = 0; -#if defined (HEAP_IN_DATA) && !defined(PDUMP) - 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); @@ -2582,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 @@ -2607,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 */ @@ -2621,21 +2466,26 @@ and announce itself normally when it is run. return Qnil; } +#endif /* not HAVE_SHM */ + #endif /* not CANNOT_DUMP */ +#ifndef SEPCHAR +#define SEPCHAR ':' +#endif /* 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) @@ -2655,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) @@ -2743,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); @@ -2758,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. */ ()) @@ -2768,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. */ ()) @@ -2777,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. */ ()) @@ -2791,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); @@ -2862,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" @@ -2870,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. @@ -2888,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 @@ -2936,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. @@ -2961,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, @@ -3010,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. @@ -3064,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\". @@ -3118,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. @@ -3148,8 +2929,7 @@ configure's idea of what the package path will be. *Directory of architecture-independent files that come with XEmacs, intended for XEmacs to use. Use of this variable in new code is almost never correct. See the -functions `locate-data-file' and `locate-data-directory' and the variable -`data-directory-list'. +function `locate-data-directory' and the variable `data-directory-list'. */ ); Vdata_directory = Qnil; @@ -3199,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. @@ -3277,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___() { }