XEmacs 21.4.10 "Military Intelligence".
[chise/xemacs-chise.git.1] / src / emacs.c
index d10e505..6d04500 100644 (file)
@@ -181,7 +181,6 @@ version 18.59 released October 31, 1992.
 #include "systime.h"
 
 #ifdef PDUMP
-#include "dump-id.h"
 #include "dumper.h"
 #endif
 
@@ -242,6 +241,10 @@ static void *malloc_state_ptr;
 void r_alloc_reinit (void);
 # endif
 
+#ifdef HAVE_GTK
+void console_type_create_select_gtk(void);
+#endif
+
 /* Variable whose value is symbol giving operating system type. */
 Lisp_Object Vsystem_type;
 
@@ -284,6 +287,7 @@ 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 Vmule_lisp_directory, Vconfigure_mule_lisp_directory;
 Lisp_Object Vmodule_directory, Vconfigure_module_directory;
 Lisp_Object Vsite_module_directory, Vconfigure_site_module_directory;
 Lisp_Object Vconfigure_package_path;
@@ -304,7 +308,7 @@ Lisp_Object Vconfigure_exec_prefix_directory, Vconfigure_prefix_directory;
 /* If nonzero, set XEmacs to run at this priority.  This is also used
    in child_setup and sys_suspend to make sure subshells run at normal
    priority. */
-int emacs_priority;
+Fixnum emacs_priority;
 
 /* Some FSF junk with running_asynch_code, to preserve the match
    data.  Not necessary because we don't call process filters
@@ -463,8 +467,8 @@ 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 EMACS_INT run_temacs_argv_size;
+static EMACS_INT run_temacs_args_size;
 
 static void shut_down_emacs (int sig, Lisp_Object stuff, int no_auto_save);
 
@@ -795,7 +799,7 @@ argmatch (char **argv, int argc, char *sstr, char *lstr,
       return 1;
     }
   arglen = (valptr != NULL && (p = strchr (arg, '=')) != NULL
-           ? p - arg : strlen (arg));
+           ? p - arg : (int) strlen (arg));
   if (lstr == 0 || arglen < minlen || strncmp (arg, lstr, arglen) != 0)
     return 0;
   else if (valptr == NULL)
@@ -1112,6 +1116,13 @@ main_1 (int argc, char **argv, char **envp, int restart)
        display_use = "x";
 
 #endif /* HAVE_X_WINDOWS */
+#ifdef HAVE_GTK
+      {
+       char *dpy = getenv ("DISPLAY");
+       if (dpy && dpy[0])
+         display_use = "gtk";
+      }
+#endif
 #ifdef HAVE_MS_WINDOWS
       if (strcmp(display_use, "x") != 0)
        display_use = "mswindows";
@@ -1137,6 +1148,11 @@ main_1 (int argc, char **argv, char **envp, int restart)
                                       so we can be fairly accurate. */
   init_intl_very_early (); /* set up the locale and domain for gettext and
                              such. */
+#ifdef HAVE_MS_WINDOWS
+  init_mswindows_very_early ();        /* Some things - like dde need to be
+                                  initialized early so that the
+                                  client doesn't give up waiting.  */
+#endif
 
   /* Now initialize the Lisp engine and the like.  Done only during
      dumping.  No dependence on anything that may be in the user's
@@ -1262,6 +1278,9 @@ main_1 (int argc, char **argv, char **envp, int restart)
 #ifdef HAVE_X_WINDOWS
       syms_of_event_Xt ();
 #endif
+#ifdef HAVE_GTK
+      syms_of_event_gtk ();
+#endif
 #ifdef HAVE_DRAGNDROP
       syms_of_dragdrop ();
 #endif
@@ -1337,6 +1356,26 @@ main_1 (int argc, char **argv, char **envp, int restart)
       syms_of_objects_tty ();
 #endif
 
+#ifdef HAVE_GTK
+      syms_of_device_gtk ();
+      syms_of_frame_gtk ();
+      syms_of_glyphs_gtk ();
+      syms_of_objects_gtk ();
+      syms_of_ui_gtk ();
+      syms_of_select_gtk ();
+#ifdef HAVE_DIALOGS
+      syms_of_dialog_gtk ();
+#endif
+#ifdef HAVE_MENUBARS
+      syms_of_menubar_gtk ();
+#endif
+      syms_of_select_gtk ();
+      
+#if defined (HAVE_MENUBARS) || defined(HAVE_SCROLLBARS) || defined(HAVE_DIALOGS) || defined(HAVE_TOOLBARS)
+      syms_of_gui_gtk ();
+#endif
+#endif /* HAVE_GTK */
+
 #ifdef HAVE_X_WINDOWS
 #ifdef HAVE_BALLOON_HELP
       syms_of_balloon_x ();
@@ -1469,6 +1508,28 @@ main_1 (int argc, char **argv, char **envp, int restart)
       console_type_create_redisplay_tty ();
 #endif
 
+#ifdef HAVE_GTK
+      console_type_create_gtk ();
+      console_type_create_select_gtk ();
+      console_type_create_device_gtk ();
+      console_type_create_frame_gtk ();
+      console_type_create_objects_gtk ();
+      console_type_create_glyphs_gtk ();
+      console_type_create_redisplay_gtk ();
+#ifdef HAVE_MENUBARS
+      console_type_create_menubar_gtk ();
+#endif
+#ifdef HAVE_SCROLLBARS
+      console_type_create_scrollbar_gtk ();
+#endif
+#ifdef HAVE_TOOLBARS
+      console_type_create_toolbar_gtk ();
+#endif
+#ifdef HAVE_DIALOGS
+      console_type_create_dialog_gtk ();
+#endif
+#endif /* HAVE_GTK */
+
 #ifdef HAVE_X_WINDOWS
       console_type_create_x ();
       console_type_create_device_x ();
@@ -1571,6 +1632,9 @@ main_1 (int argc, char **argv, char **envp, int restart)
 #ifdef HAVE_MS_WINDOWS
       image_instantiator_format_create_glyphs_mswindows ();
 #endif /* HAVE_MSWINDOWS_WINDOWS */
+#ifdef HAVE_GTK
+      image_instantiator_format_create_glyphs_gtk ();
+#endif
 
       /* Now initialize the lstream types and associated symbols.
         Other than the first function below, the functions may
@@ -1773,6 +1837,28 @@ main_1 (int argc, char **argv, char **envp, int restart)
       vars_of_objects_tty ();
 #endif
 
+#ifdef HAVE_GTK
+      vars_of_device_gtk ();
+#ifdef HAVE_DIALOGS
+      vars_of_dialog_gtk ();
+#endif
+      vars_of_event_gtk ();
+      vars_of_frame_gtk ();
+      vars_of_glyphs_gtk ();
+      vars_of_ui_gtk ();
+#ifdef HAVE_MENUBARS
+      vars_of_menubar_gtk ();
+#endif
+      vars_of_objects_gtk ();
+      vars_of_select_gtk ();
+#ifdef HAVE_SCROLLBARS
+      vars_of_scrollbar_gtk ();
+#endif
+#if defined (HAVE_MENUBARS) || defined (HAVE_SCROLLBARS) || defined (HAVE_DIALOGS) || defined (HAVE_TOOLBARS)
+      vars_of_gui_gtk ();
+#endif
+#endif /* HAVE_GTK */
+
 #ifdef HAVE_X_WINDOWS
 #ifdef HAVE_BALLOON_HELP
       vars_of_balloon_x ();
@@ -1796,6 +1882,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
 #endif
 #endif /* HAVE_X_WINDOWS */
 
+
 #ifdef HAVE_MS_WINDOWS
       vars_of_device_mswindows ();
       vars_of_console_mswindows ();
@@ -1869,6 +1956,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
         */
 
       specifier_vars_of_glyphs ();
+      specifier_vars_of_glyphs_widget ();
       specifier_vars_of_gutter ();
 #ifdef HAVE_MENUBARS
       specifier_vars_of_menubar ();
@@ -1916,6 +2004,9 @@ main_1 (int argc, char **argv, char **envp, int restart)
       /* These rely on the glyphs just created in the previous function,
         and call Fadd_spec_to_specifier(), which relies on various
         variables initialized above. */
+#ifdef HAVE_GTK
+      complex_vars_of_glyphs_gtk ();
+#endif
 #ifdef HAVE_X_WINDOWS
       complex_vars_of_glyphs_x ();
 #endif
@@ -2002,6 +2093,9 @@ main_1 (int argc, char **argv, char **envp, int restart)
 #ifdef HAVE_MS_WINDOWS
       reinit_console_type_create_mswindows ();
 #endif
+#ifdef HAVE_GTK
+      reinit_console_type_create_gtk ();
+#endif
 
       reinit_specifier_type_create ();
       reinit_specifier_type_create_image ();
@@ -2042,6 +2136,9 @@ main_1 (int argc, char **argv, char **envp, int restart)
 #ifdef HAVE_X_WINDOWS
       reinit_vars_of_event_Xt ();
 #endif
+#ifdef HAVE_GTK
+      reinit_vars_of_event_gtk ();
+#endif
 #if defined(HAVE_TTY) && (defined (DEBUG_TTY_EVENT_STREAM) || !defined (HAVE_X_WINDOWS))
       reinit_vars_of_event_tty ();
 #endif
@@ -2072,6 +2169,10 @@ main_1 (int argc, char **argv, char **envp, int restart)
       reinit_vars_of_frame_mswindows ();
 #endif
 
+#ifdef HAVE_GTK
+      reinit_vars_of_menubar_gtk ();
+#endif
+
 #ifdef HAVE_X_WINDOWS
       reinit_vars_of_device_x ();
 #ifdef HAVE_SCROLLBARS
@@ -2762,10 +2863,13 @@ all of which are called before XEmacs is actually killed.
 
 #ifdef HAVE_MS_WINDOWS
   /* If we displayed a message on the console, then we must allow the
-     user to see this message.  This may be unnecessary, but can't hurt,
-     and we can't necessarily check arg; e.g. xemacs --help kills with
-     argument 0. */
-  if (mswindows_message_outputted)
+     user to see this message.  This may be unnecessary, but can't
+     hurt, and we can't necessarily check arg; e.g. xemacs --help
+     kills with argument 0.
+
+     Don't do this in batch mode, it makes no sense and is more
+     annoying than useful. --andyp */
+  if (mswindows_message_outputted && !noninteractive)
     Fmswindows_message_box (build_string ("Messages outputted.  XEmacs is exiting."),
                            Qnil, Qnil);
 #endif
@@ -2845,28 +2949,26 @@ shut_down_emacs (int sig, Lisp_Object stuff, int no_auto_save)
        ("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"
+         "Your version of XEmacs was distributed with a PROBLEMS file that  may describe\n"
+        "your crash, and with luck a workaround.  Please check it first, but do report\n"
+        "the crash anyway.  "
 #ifdef INFODOCK
-        "Otherwise, please report this bug by selecting `Report-Bug'\n"
-         "in the InfoDock menu.\n"
+        "\n\nPlease report this bug by selecting `Report-Bug' in the InfoDock menu.\n"
+        "*BE SURE* to include the XEmacs configuration from M-x describe-installation,\n"
+        "or the file Installation in the top directory of the build tree.\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"
-        "As a last resort send ordinary email to `crashes@xemacs.org'.\n"
+        "Please report this bug by invoking M-x report-emacs-bug,\n"
+        "or by selecting `Send Bug Report' from the Help menu.  If necessary, send\n"
+        "ordinary email to `crashes@xemacs.org'.  *MAKE SURE* to include the XEmacs\n"
+        "configuration from M-x describe-installation, or equivalently the file\n"
+        "Installation in the top of the build tree.\n"
 #endif
-        "*MAKE SURE* to include the information in the command\n"
-        "M-x describe-installation.\n"
 #ifndef _MSC_VER
         "\n"
-        "If at all possible, *please* try to obtain a C stack backtrace;\n"
-        "it will help us immensely in determining what went wrong.\n"
-        "To do this, locate the core file that was produced as a result\n"
-        "of this crash (it's usually called `core' and is located in the\n"
-        "directory in which you started the editor, or maybe in your home\n"
-        "directory), and type\n"
+        "*Please* try *hard* to obtain a C stack backtrace; without it, we are unlikely\n"
+        "to be able to analyze the problem.  Locate the core file produced as a result\n"
+        "of this crash (often called `core' or `core.<process-id>', and located in\n"
+        "the directory in which you started XEmacs or your home directory), and type\n"
         "\n"
         "  gdb "
 #endif
@@ -2893,11 +2995,12 @@ shut_down_emacs (int sig, Lisp_Object stuff, int no_auto_save)
          stderr_out ("%s%s", dir, name);
       }
       stderr_out
-       (" core\n\n"
-        "then type `where' when the debugger prompt comes up.\n"
-        "(If you don't have GDB on your system, you might have DBX,\n"
-        "or XDB, or SDB.  A similar procedure should work for all of\n"
-        "these.  Ask your system administrator if you need more help.)\n");
+       (" core\n"
+        "\n"
+        "then type `where' at the debugger prompt.  No GDB on your system?  You may\n"
+        "have DBX, or XDB, or SDB.  (Ask your system administrator if you need help.)\n"
+        "If no core file was produced, enable them (often with `ulimit -c unlimited'\n"
+        "in case of future recurrance of the crash.\n");
 #endif /* _MSC_VER */
     }
 
@@ -3094,7 +3197,7 @@ decode_env_path (const char *evarname, const char *default_)
 /* Ben thinks this function should not exist or be exported to Lisp.
    We use it to define split-path-string in subr.el (not!).  */
 
-DEFUN ("split-string-by-char", Fsplit_string_by_char, 1, 2, 0, /*
+DEFUN ("split-string-by-char", Fsplit_string_by_char, 2, 2, 0, /*
 Split STRING into a list of substrings originally separated by SEPCHAR.
 */
        (string, sepchar))
@@ -3590,6 +3693,22 @@ configure's idea of what `lisp-directory' will be.
   Vconfigure_lisp_directory = Qnil;
 #endif
 
+  DEFVAR_LISP ("mule-lisp-directory", &Vmule_lisp_directory /*
+*Directory of Mule Lisp files that come with XEmacs.
+*/ );
+  Vmule_lisp_directory = Qnil;
+
+  DEFVAR_LISP ("configure-mule-lisp-directory", &Vconfigure_mule_lisp_directory /*
+For internal use by the build procedure only.
+configure's idea of what `mule-lisp-directory' will be.
+*/ );
+#ifdef PATH_MULELOADSEARCH
+  Vconfigure_mule_lisp_directory = Ffile_name_as_directory
+    (build_string ((char *) PATH_MULELOADSEARCH));
+#else
+  Vconfigure_mule_lisp_directory = Qnil;
+#endif
+
   DEFVAR_LISP ("module-directory", &Vmodule_directory /*
 *Directory of core dynamic modules that come with XEmacs.
 */ );