X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/59c65f1e9fa57f037276b70790b7e2ed0a0b0bce..cd2904bd2c06864bc02f3e454caccdeb3f0e03f2:/src/emacs.c diff --git a/src/emacs.c b/src/emacs.c index cb08e2f441..53ee61cae8 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -64,9 +64,18 @@ Boston, MA 02111-1307, USA. */ #define O_RDWR 2 #endif -extern void malloc_warning (); -extern void set_time_zone_rule (); -extern char *index (); +#ifdef HAVE_SETPGID +#if !defined (USG) || defined (BSD_PGRPS) +#undef setpgrp +#define setpgrp setpgid +#endif +#endif + +extern void malloc_warning P_ ((char *)); +extern void set_time_zone_rule P_ ((char *)); +#ifdef HAVE_INDEX +extern char *index P_ ((const char *, int)); +#endif /* Make these values available in GDB, which doesn't see macros. */ @@ -200,6 +209,79 @@ int initial_argc; static void sort_args (); void syms_of_emacs (); + +#define USAGE1 "\ +Usage: %s [OPTION-OR-FILENAME]...\n\ +\n\ +Run Emacs, the extensible, customizable, self-documenting real-time\n\ +display editor. The recommended way to start Emacs for normal editing\n\ +is with no options at all.\n\ +\n\ +Run M-x info RET m emacs RET m command arguments RET inside Emacs to\n\ +read the main documentation for these command-line arguments.\n\ +\n\ +Initialization options:\n\ +\n\ +--batch do not do interactive display; implies -q\n\ +--debug-init enable Emacs Lisp debugger during init file\n\ +--help display this help message and exit\n\ +--multibyte, --no-unibyte run Emacs in multibyte mode\n\ +--no-init-file, -q load neither ~/.emacs nor default.el\n\ +--no-shared-memory, -nl do not use shared memory\n\ +--no-site-file do not load site-start.el\n\ +--no-windows, -nw don't communicate with X, ignoring $DISPLAY\n\ +--terminal, -t DEVICE use DEVICE for terminal I/O\n\ +--unibyte, --no-multibyte run Emacs in unibyte mode\n\ +--user, -u USER load ~USER/.emacs instead of your own\n\ +--version display version information and exit\n\ +\n\ +Action options:\n\ +\n\ +FILE visit FILE using find-file\n\ ++LINENUM FILE visit FILE using find-file, then go to line LINENUM\n\ +--directory, -L DIR add DIR to variable load-path\n\ +--eval EXPR evaluate Emacs Lisp expression EXPR\n\ +--execute EXPR evaluate Emacs Lisp expression EXPR\n\ +--find-file FILE visit FILE\n\ +--funcall, -f FUNC call Emacs function FUNC with no arguments\n\ +--insert FILE insert contents of FILE into current buffer\n\ +--kill exit without asking for confirmation\n\ +--load, -l FILE load FILE of Emacs Lisp code using the load function\n\ +--visit FILE visit FILE\n\ +\n" + +#define USAGE2 "\ +Display options:\n\ +\n\ +--background-color, -bg COLOR window background color\n\ +--border-color, -bd COLOR main border color\n\ +--border-width, -bw WIDTH width of main border\n\ +--cursor-color, -cr COLOR color of the Emacs cursor indicating point\n\ +--display, -d DISPLAY use X server DISPLAY\n\ +--font, -fn FONT default font; must be fixed-widthp\n\ +--foreground-color, -fg COLOR window foreground color\n\ +--geometry, -g GEOMETRY window geometry\n\ +--iconic start Emacs in iconified state\n\ +--icon-type, -i use picture of gnu for Emacs icon\n\ +--internal-border, -ib WIDTH width between text and main border\n\ +--line-spacing, -lsp PIXELS additional space to put between lines\n\ +--mouse-color, -ms COLOR mouse cursor color in Emacs window\n\ +--name NAME title of main Emacs window\n\ +--reverse-video, -r, -rv switch foreground and background\n\ +--title, -T, -wn, TITLE title for Emacs windows\n\ +--vertical-scroll-bars, -vb enable vertical scroll bars\n\ +--xrm XRESOURCES set additional X resources\n\ +\n\ +You can generally also specify long option names with a single -; for\n\ +example, -batch as well as --batch. You can use any unambiguous\n\ +abbreviation for a --option.\n\ +\n\ +Various environment variables and window system resources also affect\n\ +Emacs' operation. See the main documentation.\n\ +\n\ +Report bugs to bug-gnu-emacs@gnu.org. First, please see the Bugs\n\ +section of the Emacs manual or the file BUGS.\n" + /* Signal code for the fatal signal that was received */ int fatal_error_code; @@ -214,11 +296,9 @@ handle_USR1_signal (sig) { struct input_event buf; - buf.kind = user_signal; - buf.code = 0; + bzero (&buf, sizeof buf); + buf.kind = USER_SIGNAL_EVENT; buf.frame_or_window = selected_frame; - buf.modifiers = 0; - buf.timestamp = 0; kbd_buffer_store_event (&buf); } @@ -231,17 +311,16 @@ handle_USR2_signal (sig) { struct input_event buf; - buf.kind = user_signal; + bzero (&buf, sizeof buf); + buf.kind = USER_SIGNAL_EVENT; buf.code = 1; buf.frame_or_window = selected_frame; - buf.modifiers = 0; - buf.timestamp = 0; kbd_buffer_store_event (&buf); } #endif /* SIGUSR2 */ -/* Handle bus errors, illegal instruction, etc. */ +/* Handle bus errors, invalid instruction, etc. */ SIGTYPE fatal_error_signal (sig) int sig; @@ -525,7 +604,7 @@ argmatch (argv, argc, sstr, lstr, minlen, valptr, skipptr) char **valptr; int *skipptr; { - char *p; + char *p = NULL; int arglen; char *arg; @@ -583,7 +662,9 @@ argmatch (argv, argc, sstr, lstr, minlen, valptr, skipptr) static void malloc_initialize_hook () { +#ifndef USE_CRT_DLL extern char **environ; +#endif if (initialized) { @@ -622,16 +703,26 @@ main (argc, argv, envp) char **argv; char **envp; { +#if GC_MARK_STACK + Lisp_Object dummy; +#endif char stack_bottom_variable; int do_initial_setlocale; int skip_args = 0; +#ifndef USE_CRT_DLL extern int errno; extern int sys_nerr; +#endif #ifdef HAVE_SETRLIMIT struct rlimit rlim; #endif int no_loadup = 0; +#if GC_MARK_STACK + extern Lisp_Object *stack_base; + stack_base = &dummy; +#endif + #ifdef LINUX_SBRK_BUG __sbrk (1); #endif @@ -869,16 +960,8 @@ main (argc, argv, envp) /* Handle the --help option, which gives a usage message.. */ if (argmatch (argv, argc, "-help", "--help", 3, NULL, &skip_args)) { - printf ("\ -Usage: %s [--batch] [-t term] [--terminal term]\n\ - [-d display] [--display display] [-nw] [--no-windows]\n\ - [-q] [--no-init-file] [-u user] [--user user] [--debug-init]\n\ - [--unibyte] [--multibyte] [--version] [--no-site-file]\n\ - [-f func] [--funcall func] [-l file] [--load file] [--eval expr]\n\ - [--execute expr] [--visit file] [--file file] [--insert file]\n\ - [+linenum] file-to-visit [--kill]\n\ -Report bugs to bug-gnu-emacs@gnu.org. First, please see\n\ -the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); + printf (USAGE1, argv[0]); + printf (USAGE2); exit (0); } @@ -1020,8 +1103,30 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); function creates Vterminal_frame. Termcap frames now use faces, and the face implementation uses some symbols as face names. */ -#ifndef HAVE_NTGUI syms_of_xfaces (); + /* Call syms_of_keyboard before init_window_once because + keyboard sets up symbols that include some face names that + the X support will want to use. This can happen when + CANNOT_DUMP is defined. */ + syms_of_keyboard (); + +#ifdef macintosh + /* init_window_once calls make_terminal_frame which on Mac OS creates + a full-fledge output_mac type frame. This does not work correctly + before syms_of_textprop, syms_of_macfns, syms_of_ccl, + syms_of_fontset, syms_of_xterm, syms_of_search, x_term_init, and + init_keyboard have already been called. */ + syms_of_textprop (); + syms_of_macfns (); + syms_of_ccl (); + syms_of_fontset (); + syms_of_macterm (); + syms_of_macmenu (); + syms_of_data (); + syms_of_search (); + + x_term_init (); + init_keyboard (); #endif init_window_once (); /* Init the window system */ @@ -1038,11 +1143,11 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); } init_eval (); - init_coding (); init_data (); #ifdef CLASH_DETECTION init_filelock ();; #endif + init_atimer (); running_asynch_code = 0; /* Handle --unibyte and the EMACS_UNIBYTE envvar, @@ -1108,7 +1213,7 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); } no_loadup - = !argmatch (argv, argc, "-nl", "--no-loadup", 6, NULL, &skip_args); + = argmatch (argv, argc, "-nl", "--no-loadup", 6, NULL, &skip_args); #ifdef HAVE_X_WINDOWS @@ -1189,7 +1294,8 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); /* AIX crashes are reported in system versions 3.2.3 and 3.2.4 if this is not done. Do it after set_process_environment so that we don't pollute Vprocess_environment. */ -#ifdef AIX + /* Setting LANG here will defeat the startup locale processing... */ +#ifdef AIX3_2 putenv ("LANG=C"); #endif @@ -1219,7 +1325,10 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); /* The basic levels of Lisp must come first */ /* And data must come first of all for the sake of symbols like error-message */ +#ifndef macintosh + /* Called before init_window_once for Mac OS. */ syms_of_data (); +#endif syms_of_alloc (); syms_of_lread (); syms_of_print (); @@ -1235,7 +1344,10 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); syms_of_casetab (); syms_of_callproc (); syms_of_category (); +#ifndef macintosh + /* Called before init_window_once for Mac OS. */ syms_of_ccl (); +#endif syms_of_charset (); syms_of_cmds (); #ifndef NO_DIR_LIBRARY @@ -1252,14 +1364,16 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); #endif /* CLASH_DETECTION */ syms_of_indent (); syms_of_insdel (); - syms_of_keyboard (); syms_of_keymap (); syms_of_macros (); syms_of_marker (); syms_of_minibuf (); syms_of_mocklisp (); syms_of_process (); +#ifndef macintosh + /* Called before init_window_once for Mac OS. */ syms_of_search (); +#endif syms_of_frame (); syms_of_syntax (); syms_of_term (); @@ -1267,8 +1381,11 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); #ifdef HAVE_SOUND syms_of_sound (); #endif - +#ifndef macintosh + /* Called before init_window_once for Mac OS. */ syms_of_textprop (); +#endif + syms_of_composite (); #ifdef VMS syms_of_vmsproc (); #endif /* VMS */ @@ -1287,13 +1404,14 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); #endif /* HAVE_X_WINDOWS */ #ifndef HAVE_NTGUI +#ifndef macintosh syms_of_xmenu (); #endif +#endif #ifdef HAVE_NTGUI syms_of_w32term (); syms_of_w32fns (); - syms_of_w32faces (); syms_of_w32select (); syms_of_w32menu (); syms_of_fontset (); @@ -1325,7 +1443,10 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); #endif /* VMS */ init_display (); /* Determine terminal type. init_sys_modes uses results */ } +#ifndef macintosh + /* Called before init_window_once for Mac OS. */ init_keyboard (); /* This too must precede init_sys_modes */ +#endif #ifdef VMS init_vmsproc (); /* And this too. */ #endif /* VMS */ @@ -1337,9 +1458,7 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); init_xdisp (); init_macros (); init_editfns (); -#ifdef LISP_FLOAT_TYPE init_floatfns (); -#endif #ifdef VMS init_vmsfns (); #endif /* VMS */ @@ -1347,6 +1466,7 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); #ifdef HAVE_SOUND init_sound (); #endif + init_window (); if (!initialized) { @@ -1396,7 +1516,6 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); extern void dump_opcode_frequencies (); atexit (_mcleanup); - // atexit (dump_opcode_frequencies); /* This uses safe_bcopy because that function comes first in the Emacs executable. It might be better to use something that gives the start of the text segment, but start_of_text is not @@ -1422,6 +1541,7 @@ the Bugs section of the Emacs manual or the file BUGS.\n", argv[0]); /* Enter editor command loop. This never returns. */ Frecursive_edit (); /* NOTREACHED */ + return 0; } /* Sort the args so we can find the most important ones @@ -1890,8 +2010,15 @@ You must run Emacs in batch mode in order to dump it.") #ifdef DOUG_LEA_MALLOC malloc_state_ptr = malloc_get_state (); #endif + +#ifdef USE_MMAP_FOR_BUFFERS + mmap_set_vars (0); +#endif unexec (XSTRING (filename)->data, !NILP (symfile) ? XSTRING (symfile)->data : 0, my_edata, 0, 0); +#ifdef USE_MMAP_FOR_BUFFERS + mmap_set_vars (1); +#endif #ifdef DOUG_LEA_MALLOC free (malloc_state_ptr); #endif @@ -2037,7 +2164,9 @@ syms_of_emacs () Vsystem_type = intern (SYSTEM_TYPE); DEFVAR_LISP ("system-configuration", &Vsystem_configuration, - "Value is string indicating configuration Emacs was built for."); + "Value is string indicating configuration Emacs was built for.\n\ +On MS-Windows, the value reflects the OS flavor and version on which\n\ +Emacs is running."); Vsystem_configuration = build_string (EMACS_CONFIGURATION); DEFVAR_LISP ("system-configuration-options", &Vsystem_configuration_options,