Commits

Anonymous committed 6719134

Import from CVS: tag r21-2-13

  • Participants
  • Parent commits de2c2a7
  • Tags r21-2-13

Comments (0)

Files changed (50)

File CHANGES-beta

 							-*- indented-text -*-
+to 21.2.13 "Demeter"
+-- Build fixes from Martin Buchholz
+-- experimental splash screen rewrite from Didier Verna
+-- Various patches from Jan Vroonhof and Andy Piper
+-- alist.el synched up with APEL 9.13 from MORIOKA Tomohiko
+-- MS Window build fixes from Jonathan Harris
+-- UCS-4/UTF-8 support from MORIOKA Tomohiko
+
 to 21.2.12 "Clio"
 -- event-stream unification for MS Windows from Andy Piper
 -- Determine best visual to use to avoid flashing from IENAGA Kazuyuki
--- Fix for new Berkeley DB library from Paul Keusemann/Gregory Neal Shapiro
+-- Fix for new Berkeley DB library from Paul Keusemann/Gregory Neil Shapiro
 -- Various package-ui fixes from Jan Vroonhof
 -- Fix for doubled font-locking during buffer reversion
 -- KFM browsing support from Neal Becker
+1999-03-12  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+	* XEmacs 21.2.13 is released
+
+1999-03-09  SL Baur  <steve@xemacs.org>
+
+	* Makefile.in.in (LC_ALL): Try very, very hard to build in C locale.
+
 1999-03-05  XEmacs Build Bot <builds@cvs.xemacs.org>
 
 	* XEmacs 21.2.12 is released

File Makefile.in.in

 
 SHELL = /bin/sh
 LANG = C
+LC_ALL = C
 RM = rm -f
 pwd = /bin/pwd
 
 It has been greatly enhanced with respect to the one once included
 with the ilisp package and should work well under XEmacs 21.0.
 
+** Gnuserv changes
+
+*** Like the old 'gnudoit' program. Gnuclient -batch now can read from stdin.
+
+*** Again like the old 'gnudoit' program, gnuclient now can return multiple
+lines.
+
 ** C mode changes
 
 *** Multiline macros are now handled, both as they affect indentation,

File lib-src/ChangeLog

+1999-03-12  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+	* XEmacs 21.2.13 is released
+
+1999-03-10  Martin Buchholz  <martin@xemacs.org>
+
+	* fakemail.c (add_a_stream): Always use full ANSI prototypes.
+
+1999-03-06  Martin Buchholz  <martin@xemacs.org>
+
+	* fakemail.c (main): Ansify.
+	(xmalloc): Ansify.
+	(xrealloc): Ansify.
+	(get_keyword): use paranoid casts ((int) (unsigned char) c) for
+	islower, toupper, isspace.
+
 1999-03-05  XEmacs Build Bot <builds@cvs.xemacs.org>
 
 	* XEmacs 21.2.12 is released

File lib-src/fakemail.c

 #include <../src/config.h>
 
 #if defined (BSD) && !defined (BSD4_1) && !defined (USE_FAKEMAIL)
-/* This program isnot used in BSD, so just avoid loader complaints.  */
+/* This program is not used in BSD, so just avoid loader complaints.  */
 int
-main ()
+main (int argc, char *argv[])
 {
   return 0;
 }
 #include <stdio.h>
 #include <stdlib.h>
 int
-main ()
+main (int argc, char *argv[])
 {
   /* Linux /bin/mail, if it exists, is NOT the Unix v7 mail that
      fakemail depends on!  This causes garbled mail.  Better to
 #else /* not BSD 4.2 (or newer) */
 #ifdef MSDOS
 int
-main ()
+main (int argc, char *argv[])
 {
   return 0;
 }
   struct header_record *previous;
 };
 typedef struct header_record *header;
-			
+
 struct stream_record
 {
   FILE *handle;
-  int (*action)();
+  int (*action)(FILE *);
   struct stream_record *rest_streams;
 };
 typedef struct stream_record *stream_list;
 /* Like malloc but get fatal error if memory is exhausted.  */
 
 static char *
-xmalloc (size)
-     size_t size;
+xmalloc (size_t size)
 {
   char *result = malloc (((unsigned) size));
   if (result == ((char *) NULL))
 }
 
 static char *
-xrealloc (ptr, size)
-     char *ptr;
-     size_t size;
+xrealloc (char *ptr, size_t size)
 {
   char *result = realloc (ptr, ((unsigned) size));
   if (result == ((char *) NULL))
 }
 
 /* Read a line of text from `stream' into `linebuffer'.
- * Return the length of the line.  
+ * Return the length of the line.
  */
 
 static long
 
   ptr = &keyword[0];
   c = *field++;
-  if ((isspace (c)) || (c == ':'))
-    return ((char *) NULL);
-  *ptr++ = ((islower (c)) ? (toupper (c)) : c);
-  while (((c = *field++) != ':') && (!(isspace (c))))
-    *ptr++ = ((islower (c)) ? (toupper (c)) : c);
+  if ((isspace ((int) (unsigned char) c)) || (c == ':'))
+    return (char *) NULL;
+  *ptr++ = ((islower ((int) (unsigned char) c)) ?
+	    (toupper ((int) (unsigned char) c)) : c);
+  while (((c = *field++) != ':') &&
+	 (!(isspace ((int) (unsigned char) c))))
+    *ptr++ = ((islower ((int) (unsigned char) c)) ?
+	      (toupper ((int) (unsigned char) c)) : c);
   *ptr++ = '\0';
-  while (isspace (c)) c = *field++;
-  if (c != ':') return ((char *) NULL);
+  while (isspace ((int) (unsigned char) c)) c = *field++;
+  if (c != ':') return (char *) NULL;
   *rest = field;
   return &keyword[0];
 }
 }
 
 static void
-add_a_stream (FILE *the_stream, int (*closing_action)())
+add_a_stream (FILE *the_stream, int (*closing_action)(FILE *))
 {
   stream_list old = the_streams;
   the_streams = new_stream ();
   *where = '\0';
   return;
 }
-
    
+
 static header
 read_header (void)
 {
 }
 
 int
-main (argc, argv)
-     int argc;
-     char **argv;
+main (int argc, char *argv[])
 {
   char *command_line;
   header the_header;
 					 args_size (the_header)));
   strcpy (command_line, mail_program_name);
   parse_header (the_header, &command_line[name_length]);
-  
+
   the_pipe = popen (command_line, "w");
   if (the_pipe == ((FILE *) NULL))
     fatal ("cannot open pipe to real mailer", (char *) 0);

File lisp/ChangeLog

+1999-03-12  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+	* XEmacs 21.2.13 is released
+
+1999-03-12  SL Baur  <steve@xemacs.org>
+
+	* simple.el (delete-key-deletes-forward): Revert to previous
+	behavior.
+
+1999-01-18  Didier Verna  <verna@inf.enst.fr>
+
+	* menubar-items.el (xemacs-splash-buffer): handle the case of
+	multiple elements in the splash buffer body.
+
+	* startup.el (splash-frame-timeout): new constant: interval
+	between splash buffer elements.
+	(command-line-1): handle splash buffer with multiple elements (use
+	a timeout).
+	(splash-frame-body): Originally `startup-splash-frame-body'.
+	Rewrote a cleaner and more readable version. This can now be array,
+	in which case each element is displayed in turn in the splash buffer.
+	(splash-frame-static-body): new constant. Persistent information
+	across all splash buffer elements (preserves the possibility to give
+	it in different	languages.
+	(circulate-splash-frame-elements): new function. Used as a timeout
+	to circulate through all splash frame elements and display them in
+	sequence.
+	(display-splash-frame): originally `startup-splash-frame'. Handle
+	the case of multiple elements in the splash buffer body. Now
+	returns a timeout id if multiple elements to display, or nil.
+
+1999-02-19  Jan Vroonhof  <vroonhof@math.ethz.ch>
+
+	* x-faces.el (x-init-global-faces): Add default tag to specifiers, 
+	so they can be overridden by x-init-face-from-resources.
+	Additionally specify the font name also with an x tag.
+
+1999-03-08  Andy Piper  <andy@xemacs.org>
+	
+	* package-get.el (package-get-base): autoload.
+
+	* menubar-items.el (default-menubar): add update menu item. Fix
+	custom menu to only be activated when package-base is available.
+
+	* package-get.el (package-get-custom): don't load
+	package-get-custom as it is auto-generated. Fix group definition.
+
+1999-03-05  Didier Verna  <verna@inf.enst.fr>
+
+	* cus-dep.el (Custom-make-dependencies): use `prin1-to-string'
+	instead of `symbol-name' (Thanks Kyle).
+
+	* cus-edit.el (custom-save-variables): use `prin1' instead of
+	princ to write symbols.
+
 1999-03-05  XEmacs Build Bot <builds@cvs.xemacs.org>
 
 	* XEmacs 21.2.12 is released

File lisp/alist.el

-;;; alist.el --- utility functions about assoc-list
+;;; alist.el --- utility functions about association-list
 
-;; Copyright (C) 1993,1994,1995,1996 Free Software Foundation, Inc.
+;; Copyright (C) 1993,1994,1995,1996,1998 Free Software Foundation, Inc.
 
 ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;; Version:
-;;	$Id: alist.el,v 1.1 1997/11/29 20:37:43 steve Exp $
 ;; Keywords: alist
 
-;; This file is part of SEMI (SEMI is Emacs MIME Interfaces).
+;; This file is part of APEL (A Portable Emacs Library).
 
 ;; This program is free software; you can redistribute it and/or
 ;; modify it under the terms of the GNU General Public License as
 
 ;;; Code:
 
+;;;###autoload
 (defun put-alist (item value alist)
   "Modify ALIST to set VALUE to ITEM.
 If there is a pair whose car is ITEM, replace its cdr by VALUE.
       (cons (cons item value) alist)
       )))
 
+;;;###autoload
 (defun del-alist (item alist)
   "If there is a pair whose key is ITEM, delete it from ALIST.
 \[tomo's ELIS emulating function]"
 	  )
 	alist))))
 
+;;;###autoload
 (defun set-alist (symbol item value)
   "Modify a alist indicated by SYMBOL to set VALUE to ITEM."
   (or (boundp symbol)
   (set symbol (put-alist item value (symbol-value symbol)))
   )
 
+;;;###autoload
 (defun remove-alist (symbol item)
   "Remove ITEM from the alist indicated by SYMBOL."
   (and (boundp symbol)
        (set symbol (del-alist item (symbol-value symbol)))
        ))
 
+;;;###autoload
 (defun modify-alist (modifier default)
   "Modify alist DEFAULT into alist MODIFIER."
   (mapcar (function
 	  modifier)
   default)
 
+;;;###autoload
 (defun set-modified-alist (sym modifier)
   "Modify a value of a symbol SYM into alist MODIFIER.
 The symbol SYM should be alist. If it is not bound,

File lisp/auto-autoloads.el

 
 ;;;***
 
+;;;### (autoloads (set-modified-alist modify-alist remove-alist set-alist del-alist put-alist) "alist" "lisp/alist.el")
+
+(autoload 'put-alist "alist" "\
+Modify ALIST to set VALUE to ITEM.
+If there is a pair whose car is ITEM, replace its cdr by VALUE.
+If there is not such pair, create new pair (ITEM . VALUE) and
+return new alist whose car is the new pair and cdr is ALIST.
+[tomo's ELIS like function]" nil nil)
+
+(autoload 'del-alist "alist" "\
+If there is a pair whose key is ITEM, delete it from ALIST.
+[tomo's ELIS emulating function]" nil nil)
+
+(autoload 'set-alist "alist" "\
+Modify a alist indicated by SYMBOL to set VALUE to ITEM." nil nil)
+
+(autoload 'remove-alist "alist" "\
+Remove ITEM from the alist indicated by SYMBOL." nil nil)
+
+(autoload 'modify-alist "alist" "\
+Modify alist DEFAULT into alist MODIFIER." nil nil)
+
+(autoload 'set-modified-alist "alist" "\
+Modify a value of a symbol SYM into alist MODIFIER.
+The symbol SYM should be alist. If it is not bound,
+its value regard as nil." nil nil)
+
+;;;***
+
 ;;;### (autoloads (apropos-documentation apropos-value apropos apropos-command) "apropos" "lisp/apropos.el")
 
 (fset 'command-apropos 'apropos-command)
 
 ;;;### (autoloads (package-get-custom package-get-package-provider package-get package-get-dependencies package-get-all package-get-update-all package-get-delete-package package-get-save-base package-get-update-base-from-buffer package-get-update-base package-get-update-base-entry package-get-require-base package-get-download-menu) "package-get" "lisp/package-get.el")
 
+(defvar package-get-base nil "\
+List of packages that are installed at this site.
+For each element in the alist,  car is the package name and the cdr is
+a plist containing information about the package.   Typical fields
+kept in the plist are:
+
+version		- version of this package
+provides	- list of symbols provided
+requires	- list of symbols that are required.
+		  These in turn are provided by other packages.
+filename	- name of the file.
+size		- size of the file (aka the bundled package)
+md5sum		- computed md5 checksum
+description	- What this package is for.
+type		- Whether this is a 'binary (default) or 'single file package
+
+More fields may be added as needed.  An example:
+
+'(
+ (name
+  (version \"<version 2>\"
+   file \"filename\"
+   description \"what this package is about.\"
+   provides (<list>)
+   requires (<list>)
+   size <integer-bytes>
+   md5sum \"<checksum\"
+   type single
+   )
+  (version \"<version 1>\"
+   file \"filename\"
+   description \"what this package is about.\"
+   provides (<list>)
+   requires (<list>)
+   size <integer-bytes>
+   md5sum \"<checksum\"
+   type single
+   )
+   ...
+   ))
+
+For version information, it is assumed things are listed in most
+recent to least recent -- in other words, the version names don't have to
+be lexically ordered.  It is debatable if it makes sense to have more than
+one version of a package available.")
+
 (autoload 'package-get-download-menu "package-get" "\
 Build the `Add Download Site' menu." nil nil)
 

File lisp/cus-dep.el

 			   (if found
 			       (insert " ")
 			     (insert "(custom-add-loads '"
-				     (symbol-name sym) " '("))
+				     (prin1-to-string sym) " '("))
 			   (prin1 where (current-buffer))
 			   (push where found)))
 		       (when found

File lisp/cus-edit.el

 					   (not (get symbol 'force-value)))))))
 		    (when value
 		      (princ "\n '(")
-		      (princ symbol)
+		      (prin1 symbol)
 		      (princ " ")
 		      (prin1 (car value))
 		      (cond (requests
 			       ;; Don't print default face here.
 			       value)
 		      (princ "\n '(")
-		      (princ symbol)
+		      (prin1 symbol)
 		      (princ " ")
 		      (prin1 value)
 		      (if (or (get symbol 'face-defface-spec)

File lisp/custom-load.el

 (custom-add-loads 'isearch '("isearch-mode"))
 (custom-add-loads 'font-lock-faces '("font-lock"))
 (custom-add-loads 'modeline '("modeline"))
-(custom-add-loads 'editing '("simple" "abbrev" "fill" "mouse" "cus-edit" "dragdrop"))
+(custom-add-loads 'editing '("simple" "abbrev" "fill" "mouse" "dragdrop" "cus-edit"))
 (custom-add-loads 'matching '("simple" "isearch-mode" "hyper-apropos"))
 (custom-add-loads 'i18n '("cus-edit"))
 (custom-add-loads 'info '("toolbar-items" "info"))

File lisp/menubar-items.el

                   (package-get-download-menu)))
        ["Update Package Index" package-get-update-base]
        ["List & Install" pui-list-packages]
-       ("Using Custom"
-	("Select" :filter (lambda (&rest junk)
-			  (cdr (custom-menu-create 'packages))))
-	["Update" package-get-custom])
+       ["Update Installed Packages" package-get-update-all]
+       ;; hack-o-matic, we can't force a laod of package-base here
+       ;; since it triggers dialog box interactions which we can't
+       ;; deal while using a menu
+       ("Using Custom" 
+	:filter (lambda (&rest junk)
+		  (if package-get-base
+		      (cdr (custom-menu-create 'packages))
+		    '(["Please load Package Index" (lamda (&rest junk) ()) nil]))))
+       
        ["Help" (Info-goto-node "(xemacs)Packages")])
 
       "---"
 (defun xemacs-splash-buffer ()
   "Redisplay XEmacs splash screen in a buffer."
   (interactive)
-  (let ((buffer (get-buffer-create "*Splash*")))
+  (let ((buffer (get-buffer-create "*Splash*"))
+	tmout)
     (set-buffer buffer)
+    (setq buffer-read-only t)
     (erase-buffer buffer)
-    (startup-splash-frame)
+    (setq tmout (display-splash-frame))
+    (when tmout
+      (make-local-hook 'kill-buffer-hook)
+      (add-hook 'kill-buffer-hook
+		`(lambda ()
+		   (disable-timeout ,tmout))
+		nil t))
     (pop-to-buffer buffer)
     (delete-other-windows)))
 

File lisp/package-get.el

   "Automatic Package Fetcher and Installer."
   :prefix "package-get"
   :group 'package-tools)
-  
+
+;;;###autoload  
 (defvar package-get-base nil
   "List of packages that are installed at this site.
 For each element in the alist,  car is the package name and the cdr is
   "Fetch and install the latest versions of all customized packages."
   (interactive)
   (package-get-require-base t)
-  ;; Load a fresh copy
-  (load "package-get-custom.el")
   (mapcar (lambda (pkg)
 	    (if (eval (intern (concat (symbol-name (car pkg)) "-package")))
 		(package-get (car pkg) nil))
          (custom-var (intern (concat (symbol-name package) "-package")))
          (description (plist-get props 'description)))
     (when (not (memq group package-get-custom-groups))
-      (setq package-get-custom-groups (cons package
+      (setq package-get-custom-groups (cons group
                                             package-get-custom-groups))
       (eval `(defgroup ,group nil
                ,(concat category " package group")

File lisp/simple.el

   (and overwrite-mode (not (eolp))
        (save-excursion (insert-char ?\  arg))))
 
-(defcustom delete-key-deletes-forward t
+(defcustom delete-key-deletes-forward nil
   "*If non-nil, the DEL key will erase one character forwards.
 If nil, the DEL key will erase one character backwards."
   :type 'boolean

File lisp/startup.el

 (defvar command-line-processed nil "t once command line has been processed")
 
 (defconst startup-message-timeout 12000) ; More or less disable the timeout
+(defconst splash-frame-timeout 7) ; interval between splash frame elements
 
 (defconst inhibit-startup-message nil
   "*Non-nil inhibits the initial startup message.
       (when (string= (buffer-name) "*scratch*")
 	(unless (or inhibit-startup-message
 		    (input-pending-p))
-	  (let ((timeout nil))
+	  (let (tmout circ-tmout)
 	    (unwind-protect
 		;; Guts of with-timeout
-		(catch 'timeout
-		  (setq timeout (add-timeout startup-message-timeout
-					     (lambda (ignore)
-					       (condition-case nil
-						   (throw 'timeout t)
-						 (error nil)))
-					     nil))
-		  (startup-splash-frame)
+		(catch 'tmout
+		  (setq tmout (add-timeout startup-message-timeout
+					   (lambda (ignore)
+					     (condition-case nil
+						 (throw 'tmout t)
+					       (error nil)))
+					   nil))
+		  (setq circ-tmout (display-splash-frame))
 		  (or nil;; (pos-visible-in-window-p (point-min))
 		      (goto-char (point-min)))
 		  (sit-for 0)
 		  (setq unread-command-event (next-command-event)))
-	      (when timeout (disable-timeout timeout)))))
+	      (when tmout (disable-timeout tmout))
+	      (when circ-tmout (disable-timeout circ-tmout)))))
 	(with-current-buffer (get-buffer "*scratch*")
 	  ;; In case the XEmacs server has already selected
 	  ;; another buffer, erase the one our message is in.
     (symbol-name e)))
 
 (defun splash-frame-present-hack (e v)
-  ;;  (set-extent-property e 'mouse-face 'highlight)
-  ;;  (set-extent-property e 'keymap
-  ;;                       startup-presentation-hack-keymap)
-  ;;  (set-extent-property e 'startup-presentation-hack v)
-  ;;  (set-extent-property e 'help-echo
-  ;;                       'startup-presentation-hack-help))
+  ;;   (set-extent-property e 'mouse-face 'highlight)
+  ;;   (set-extent-property e 'keymap
+  ;;    		       startup-presentation-hack-keymap)
+  ;;   (set-extent-property e 'startup-presentation-hack v)
+  ;;   (set-extent-property e 'help-echo
+  ;;    		       'startup-presentation-hack-help)
   )
 
 (defun splash-hack-version-string ()
     (+ left-margin
        (round (/ (/ (- fill-area-width glyph-pixwidth) 2) avg-pixwidth)))))
 
-(defun startup-splash-frame-body ()
-  `("\n" ,(emacs-version) "\n"
-    ,@(if (string-match "beta" emacs-version)
-	  `( (face (bold blue) ( "This is an Experimental version of XEmacs. "
-				 " Type " (key describe-beta)
-				 " to see what this means.\n")))
-	`( "\n"))
-    (face bold-italic "\
+(defun splash-frame-body ()
+  `[((face (blue bold underline)
+	   "\nDistribution, copying license, warranty:\n\n")
+     "Please visit the XEmacs website at http://www.xemacs.org !\n\n"
+     ,@(if (featurep 'sparcworks)
+	   `( "\
+Sun provides support for the WorkShop/XEmacs integration package only.
+All other XEmacs packages are provided to you \"AS IS\".\n"
+	      ,@(let ((lang (or (getenv "LC_ALL") (getenv "LC_MESSAGES") 
+				(getenv "LANG"))))
+		  (if (and
+		       (not (featurep 'mule)) ;; Already got mule?
+		       ;; No Mule support on tty's yet
+		       (not (eq 'tty (console-type))) 
+		       lang ;; Non-English locale?
+		       (not (string= lang "C"))
+		       (not (string-match "^en" lang))
+		       ;; Comes with Sun WorkShop
+		       (locate-file "xemacs-mule" exec-path))
+		      '( "\
+This version of XEmacs has been built with support for Latin-1 languages only.
+To handle other languages you need to run a Multi-lingual (`Mule') version of
+XEmacs, by either running the command `xemacs-mule', or by using the X resource
+`ESERVE*defaultXEmacsPath: xemacs-mule' when starting XEmacs from Sun WorkShop.
+\n")))))
+     ((key describe-no-warranty) 
+      ": "(face (red bold) "XEmacs comes with ABSOLUTELY NO WARRANTY\n"))
+     ((key describe-copying)
+      ": conditions to give out copies of XEmacs\n")
+     ((key describe-distribution)
+      ": how to get the latest version\n")
+     "\n--\n"
+     (face italic "\
 Copyright (C) 1985-1998 Free Software Foundation, Inc.
 Copyright (C) 1990-1994 Lucid, Inc.
 Copyright (C) 1993-1997 Sun Microsystems, Inc. All Rights Reserved.
 Copyright (C) 1994-1996 Board of Trustees, University of Illinois
-Copyright (C) 1995-1996 Ben Wing\n\n")
+Copyright (C) 1995-1996 Ben Wing\n"))
     
-    ,@(if (featurep 'sparcworks)
-          `( "\
-Sun provides support for the WorkShop/XEmacs integration package only.
-All other XEmacs packages are provided to you \"AS IS\".
-For full details, type " (key describe-no-warranty)
-" to refer to the GPL Version 2, dated June 1991.\n\n"
-,@(let ((lang (or (getenv "LC_ALL") (getenv "LC_MESSAGES") (getenv "LANG"))))
-    (if (and
-         (not (featurep 'mule))         ; Already got mule?
-         (not (eq 'tty (console-type))) ; No Mule support on tty's yet
-         lang                           ; Non-English locale?
-         (not (string= lang "C"))
-         (not (string-match "^en" lang))
-         (locate-file "xemacs-mule" exec-path)) ; Comes with Sun WorkShop
-        '( "\
-This version of XEmacs has been built with support for Latin-1 languages only.
-To handle other languages you need to run a Multi-lingual (`Mule') version of
-XEmacs, by either running the command `xemacs-mule', or by using the X resource
-`ESERVE*defaultXEmacsPath: xemacs-mule' when starting XEmacs from Sun WorkShop.\n\n"))))
+    ((face (blue bold underline) "\nInformation, on-line help:\n\n")
+     "XEmacs comes with plenty of documentation...\n\n"
+     ,@(if (string-match "beta" emacs-version)
+	   `((key describe-beta) 
+	     ": " (face (red bold)
+			"This is an Experimental version of XEmacs.\n"))
+	 `( "\n"))
+     ((key xemacs-local-faq)
+      ": read the XEmacs FAQ (a " (face underline "capital") " F!)\n")
+     ((key help-with-tutorial)
+      ": read the XEmacs tutorial (also available through the "
+      (face bold "Help") " menu)\n")
+     ((key help-command)
+      ": get help on using XEmacs (also available through the "
+      (face bold "Help") " menu)\n")
+     ((key info) ": read the on-line documentation\n\n")
+     ((key describe-project) ": read about the GNU project\n")
+     ((key about-xemacs) ": see who's developping XEmacs\n"))
 
-        '("XEmacs comes with ABSOLUTELY NO WARRANTY; type "
-          (key describe-no-warranty) " for full details.\n"))
-    
-    "You may give out copies of XEmacs; type "
-    (key describe-copying) " to see the conditions.\n"
-    "Type " (key describe-distribution)
-    " for information on getting the latest version.\n\n"
-
-    "Type " (key help-command) " or use the " (face bold "Help") " menu to get help.\n"
-    "Type " (key advertised-undo) " to undo changes  (`C-' means use the Control key).\n"
-    "To get out of XEmacs, type " (key save-buffers-kill-emacs) ".\n"
-    "Type " (key help-with-tutorial) " for a tutorial on using XEmacs.\n"
-    "Type " (key info) " to enter Info, "
-    "which you can use to read online documentation.\n"
-    (face (bold red) ( "\
-For tips and answers to frequently asked questions, see the XEmacs FAQ.
-\(It's on the Help menu, or type " (key xemacs-local-faq) " [a capital F!].\)"))))
+    ((face (blue bold underline) "\nUseful stuff:\n\n")
+     "Things that you should know rather quickly...\n\n"
+     ((key find-file) ": visit a file\n")
+     ((key save-buffer) ": save changes\n")
+     ((key advertised-undo) ": undo changes\n")
+     ((key save-buffers-kill-emacs) ": exit XEmacs\n"))
+    ])
 
 ;; I really hate global variables, oh well.
 ;(defvar xemacs-startup-logo-function nil
 ;  "If non-nil, function called to provide the startup logo.
 ;This function should return an initialized glyph if it is used.")
 
-(defun startup-splash-frame ()
-  (let ((p (point))
-;	(logo (cond (xemacs-startup-logo-function
-;		     (funcall xemacs-startup-logo-function))
-;		    (t xemacs-logo)))
-	(logo xemacs-logo)
+;; This will hopefully go away when gettext is functionnal.
+(defconst splash-frame-static-body
+  `(,(emacs-version) "\n\n"
+    (face italic "`C-' means the control key,`M-' means the meta key\n\n")))
+
+
+(defun circulate-splash-frame-elements (client-data)
+  (with-current-buffer (aref client-data 2)
+    (let ((buffer-read-only nil)
+	  (elements (aref client-data 3))
+	  (indice (aref client-data 0)))
+      (goto-char (aref client-data 1))
+      (delete-region (point) (point-max))
+      (splash-frame-present (aref elements indice))
+      (set-buffer-modified-p nil)
+      (aset client-data 0
+	    (if (= indice (- (length elements) 1))
+		0
+	      (1+ indice )))
+      )))
+
+;; ### This function now returns the (possibly nil) timeout circulating the
+;; splash-frame elements
+(defun display-splash-frame ()
+  (let ((logo xemacs-logo)
+	(buffer-read-only nil)
         (cramped-p (eq 'tty (console-type))))
     (unless cramped-p (insert "\n"))
     (indent-to (startup-center-spaces logo))
     (set-extent-begin-glyph (make-extent (point) (point)) logo)
-    (insert (if cramped-p "\n" "\n\n"))
-    (splash-frame-present-hack (make-extent p (point)) 'about-xemacs))
-
-  (let ((after-change-functions nil))	; no font-lock, thank you
-    (dolist (l (startup-splash-frame-body))
-      (splash-frame-present l)))
-  (splash-hack-version-string)
-  (set-buffer-modified-p nil))
+    ;;(splash-frame-present-hack (make-extent p (point)) 'about-xemacs))
+    (insert "\n\n")
+    (splash-frame-present splash-frame-static-body)
+    (splash-hack-version-string)
+    (goto-char (point-max))
+    (let* ((after-change-functions nil) ; no font-lock, thank you
+	   (elements (splash-frame-body))
+	   (client-data `[ 1 ,(point) ,(current-buffer) ,elements ])
+	   tmout)
+      (if (listp  elements) ;; A single element to display
+	  (splash-frame-present (splash-frame-body))
+	;; several elements to rotate
+	(splash-frame-present (aref elements 0))
+	(setq tmout (add-timeout splash-frame-timeout
+				 'circulate-splash-frame-elements
+				 client-data splash-frame-timeout)))
+      (set-buffer-modified-p nil)
+      tmout)))
 
 ;;  (let ((present-file
 ;;         #'(lambda (f)

File lisp/x-faces.el

 (defun x-init-global-faces ()
   (or (face-font 'default 'global)
       (set-face-font 'default
-		     "-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*")
-      'global)
+		     "-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*"
+		     'global '(x default)))
   (or (face-foreground 'default 'global)
-      (set-face-foreground 'default "black" 'global 'x))
+      (set-face-foreground 'default "black" 'global '(x default)))
   (or (face-background 'default 'global)
-      (set-face-background 'default "gray80" 'global 'x)))
+      (set-face-background 'default "gray80" 'global '(x default))))
 
 ;;; x-init-device-faces is responsible for initializing default
 ;;; values for faces on a newly created device.

File lwlib/ChangeLog

+1999-03-12  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+	* XEmacs 21.2.13 is released
+
 1999-03-05  XEmacs Build Bot <builds@cvs.xemacs.org>
 
 	* XEmacs 21.2.12 is released

File man/ChangeLog

+1999-03-12  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+	* XEmacs 21.2.13 is released
+
 1999-03-05  XEmacs Build Bot <builds@cvs.xemacs.org>
 
 	* XEmacs 21.2.12 is released

File nt/ChangeLog

+1999-03-12  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+	* XEmacs 21.2.13 is released
+
+1999-03-07  Jonathan Harris  <jhar@tardis.ed.ac.uk>
+
+	* xemacs.mak:
+	  Don't link lib-src programs incrementally.
+	  Don't include debug info in release builds.
+	  Put intermediate files in the appropriate directories.
+	  Make "distclean" target delete all intermediate files.
+
+1999-03-07  Jonathan Harris  <jhar@tardis.ed.ac.uk>
+
+	* xemacs.mak:
+	  Fix building on Windows 95/98 by conditionalising escape
+	  character '^'.
+	  Only put mule-packages in package path on MULE builds.
+	  Only build source browser files on debug builds.
+	  Build source browser database before link so that it's
+	  available even if link fails.
+
 1999-03-05  XEmacs Build Bot <builds@cvs.xemacs.org>
 
 	* XEmacs 21.2.12 is released

File nt/xemacs.mak

 # Synched up with: Not in FSF.
 #
 
+# Shell escape character. Used for escaping ', ` and " in commands.
+ESC=^
+
 XEMACS=..
 LISP=$(XEMACS)\lisp
 MODULES=$(XEMACS)\modules
 NT=$(XEMACS)\nt
+OUTDIR=$(NT)\obj
 
 # Program name and version
 
 INSTALL_DIR=c:\Program Files\XEmacs\XEmacs-$(XEMACS_VERSION_STRING)
 ! endif
 !endif
+!if !defined(HAVE_MULE)
+HAVE_MULE=0
+!endif
 !if !defined(PACKAGE_PATH)
 ! if !defined(PACKAGE_PREFIX)
 PACKAGE_PREFIX=c:\Program Files\XEmacs
 ! endif
+! if $(HAVE_MULE)
 PACKAGE_PATH=~\.xemacs;;$(PACKAGE_PREFIX)\site-packages;$(PACKAGE_PREFIX)\mule-packages;$(PACKAGE_PREFIX)\xemacs-packages
+! else
+PACKAGE_PATH=~\.xemacs;;$(PACKAGE_PREFIX)\site-packages;$(PACKAGE_PREFIX)\xemacs-packages
+! endif
 !endif
 PATH_PACKAGEPATH="$(PACKAGE_PATH:\=\\)"
 !if !defined(HAVE_MSW)
 !if !defined(HAVE_X)
 HAVE_X=0
 !endif
-!if !defined(HAVE_MULE)
-HAVE_MULE=0
-!endif
 !if !defined(HAVE_XPM)
 HAVE_XPM=0
 !endif
 #
 # System configuration
 #
-!if !defined(PROCESSOR_ARCHITECTURE) && "$(OS)" != "Windows_NT"
+!if !defined(OS)
+OS=Windows_95/98
+# command.com doesn't like or need '^' as an escape character
+ESC=
 EMACS_CONFIGURATION=i586-pc-win32
 !else if "$(PROCESSOR_ARCHITECTURE)" == "x86"
 EMACS_CONFIGURATION=i586-pc-win32
 CONFIG_ERROR=1
 !endif
 !if $(HAVE_MSW) && $(HAVE_TOOLBARS) && !$(HAVE_XPM)
-!error Toolbars require XPM support
+!message Toolbars require XPM support
 CONFIG_ERROR=1
 !endif
 !if $(CONFIG_ERROR)
 !if $(DEBUG_XEMACS)
 OPT=-Od -Zi
 !else
-OPT=-O2 -G5 -Zi
+OPT=-O2 -G5
 !endif
 
 CFLAGS=-nologo -W3 $(OPT)
 
 !if $(DEBUG_XEMACS)
 DEBUG_DEFINES=-DDEBUG_XEMACS -D_DEBUG 
-DEBUG_FLAGS= -debugtype:both -debug:full
+DEBUG_FLAGS=-debug:full
 !endif
 
 !if $(USE_MINIMAL_TAGBITS)
 	-DWIN32 -D_WIN32 -DWIN32_LEAN_AND_MEAN -DWINDOWSNT -Demacs \
 	-DHAVE_CONFIG_H $(PROGRAM_DEFINES) $(PATH_DEFINES)
 
-OUTDIR=obj
-
 #
 # Creating simplified versions of Installation and Installation.el
 #
 # to create a legal string in LISP for Installation.el.
 #
 !if [echo OS: $(OS)>Installation] ||\
-[echo XEmacs $(XEMACS_VERSION_STRING) $(xemacs_codename:"=\") configured for ^`$(EMACS_CONFIGURATION)^'.>>Installation] ||\
+[echo XEmacs $(XEMACS_VERSION_STRING) $(xemacs_codename:"=\") configured for $(ESC)`$(EMACS_CONFIGURATION)$(ESC)'.>>Installation] ||\
 [echo Where should the build process find the source code?>>Installation] ||\
 [echo $(MAKEDIR:\=\\)>>Installation]
 !endif
 !if [echo MS Windows>>Installation]
 !endif
 !endif
-!if (!defined (HAVE_MSW) && !defined (HAVE_X))
-!if [echo Please specify at least one HAVE_MSW^=1 and^/or HAVE_X^=1>>Installation]
-!endif
-!endif
 # Creation of Installation.el
 !if [type Installation] ||\
-[echo (setq Installation-string ^">Installation.el] ||\
+[echo (setq Installation-string $(ESC)">Installation.el] ||\
 [type Installation >>Installation.el] ||\
-[echo ^")>>Installation.el]
+[echo $(ESC)")>>Installation.el]
 !endif
 
 
 !if [echo Creating $(CONFIG_VALUES) && echo ;;; Do not edit this file!>$(CONFIG_VALUES)]
 !endif
 # MAKEDIR has to be made into a string.
-!if [echo blddir>>$(CONFIG_VALUES) && echo ^"$(MAKEDIR:\=\\)\\..^">>$(CONFIG_VALUES)]
+!if [echo blddir>>$(CONFIG_VALUES) && echo $(ESC)"$(MAKEDIR:\=\\)\\..$(ESC)">>$(CONFIG_VALUES)]
 !endif
-!if [echo CC>>$(CONFIG_VALUES) && echo ^"$(CC:\=\\)^">>$(CONFIG_VALUES)]
+!if [echo CC>>$(CONFIG_VALUES) && echo $(ESC)"$(CC:\=\\)$(ESC)">>$(CONFIG_VALUES)]
 !endif
-!if [echo CFLAGS>>$(CONFIG_VALUES) && echo ^"$(CFLAGS:\=\\)^">>$(CONFIG_VALUES)]
+!if [echo CFLAGS>>$(CONFIG_VALUES) && echo $(ESC)"$(CFLAGS:\=\\)$(ESC)">>$(CONFIG_VALUES)]
 !endif
-!if [echo CPP>>$(CONFIG_VALUES) && echo ^"$(CPP:\=\\)^">>$(CONFIG_VALUES)]
+!if [echo CPP>>$(CONFIG_VALUES) && echo $(ESC)"$(CPP:\=\\)$(ESC)">>$(CONFIG_VALUES)]
 !endif
-!if [echo CPPFLAGS>>$(CONFIG_VALUES) && echo ^"$(CPPFLAGS:\=\\)^">>$(CONFIG_VALUES)]
+!if [echo CPPFLAGS>>$(CONFIG_VALUES) && echo $(ESC)"$(CPPFLAGS:\=\\)$(ESC)">>$(CONFIG_VALUES)]
 !endif
-!if [echo LISPDIR>>$(CONFIG_VALUES) && echo ^"$(MAKEDIR:\=\\)\\$(LISP:\=\\)^">>$(CONFIG_VALUES)]
+!if [echo LISPDIR>>$(CONFIG_VALUES) && echo $(ESC)"$(MAKEDIR:\=\\)\\$(LISP:\=\\)$(ESC)">>$(CONFIG_VALUES)]
 !endif
 # PATH_PACKAGEPATH is already a quoted string.
 !if [echo PACKAGE_PATH>>$(CONFIG_VALUES) && echo $(PATH_PACKAGEPATH)>>$(CONFIG_VALUES)]
 # Inferred rule
 {$(LIB_SRC)}.c{$(LIB_SRC)}.exe :
 	@cd $(LIB_SRC)
-	$(CCV) -I. -I$(XEMACS)/src -I$(XEMACS)/nt/inc $(LIB_SRC_DEFINES) $(CFLAGS) -Fe$@ $**
+	$(CCV) -I. -I$(XEMACS)/src -I$(XEMACS)/nt/inc $(LIB_SRC_DEFINES) $(CFLAGS) -Fe$@ $** -link -incremental:no
 	@cd $(NT)
 
 # Individual dependencies
 $(LIB_SRC)/etags.exe : $(LIB_SRC)/etags.c $(ETAGS_DEPS)
 $(LIB_SRC)/movemail.exe: $(LIB_SRC)/movemail.c $(LIB_SRC)/pop.c $(ETAGS_DEPS)
 	@cd $(LIB_SRC)
-	$(CCV) -I. -I$(XEMACS)/src -I$(XEMACS)/nt/inc $(LIB_SRC_DEFINES) $(CFLAGS) -Fe$@ $** wsock32.lib
+	$(CCV) -I. -I$(XEMACS)/src -I$(XEMACS)/nt/inc $(LIB_SRC_DEFINES) $(CFLAGS) -Fe$@ $** wsock32.lib -link -incremental:no
 	@cd $(NT)
 
 LIB_SRC_TOOLS = \
 RUNEMACS = $(XEMACS)\src\runxemacs.exe
 
 $(RUNEMACS): $(LIB_SRC)\run.c $(LIB_SRC)\run.res
-	$(CCV) -I$(LIB_SRC) -O2 -Fe$@ $** kernel32.lib user32.lib
+	$(CCV) -I$(LIB_SRC) $(CFLAGS) -Fe$@ -Fo$(LIB_SRC) -Fd$(LIB_SRC)\ $** kernel32.lib user32.lib -link -incremental:no
 
 $(LIB_SRC)\run.res: $(LIB_SRC)\run.rc
-	rc -I$(LIB_SRC) -FO$(LIB_SRC)\run.res $(LIB_SRC)\run.rc
+	rc -I$(LIB_SRC) -Fo$@ $**
 
 #------------------------------------------------------------------------------
 
 
 LASTFILE=$(OUTDIR)\lastfile.lib
 LASTFILE_SRC=$(XEMACS)\src
-LASTFILE_FLAGS=$(CFLAGS) $(INCLUDES) -Fo$@ -c
+LASTFILE_FLAGS=$(CFLAGS) $(INCLUDES) -Fo$@ -Fd$* -c
 LASTFILE_OBJS= \
 	$(OUTDIR)\lastfile.obj
 
 	$(OUTDIR)\xlwscrollbar.obj
 
 $(LWLIB): $(LWLIB_OBJS)
-	link.exe -lib -nologo $(DEBUG_FLAGS) -out:$@ $(LWLIB_OBJS)
+	link.exe -lib -nologo -out:$@ $(LWLIB_OBJS)
 
 $(OUTDIR)\lwlib-config.obj:	$(LWLIB_SRC)\lwlib-config.c
 	 $(CCV) $(LWLIB_FLAGS) $**
  -stack:0x800000 -entry:_start -subsystem:console\
  -pdb:$(TEMACS_DIR)\temacs.pdb -map:$(TEMACS_DIR)\temacs.map \
  -heap:0x00100000 -out:$@
-TEMACS_CPP_FLAGS=-ML -c $(CFLAGS) $(INCLUDES) $(DEFINES) $(DEBUG_DEFINES) \
+TEMACS_CPP_FLAGS=-ML -c \
+ $(CFLAGS) $(INCLUDES) $(DEFINES) $(DEBUG_DEFINES) \
  -DEMACS_MAJOR_VERSION=$(emacs_major_version) \
  -DEMACS_MINOR_VERSION=$(emacs_minor_version) \
  $(EMACS_BETA_VERSION) \
 	$(OUTDIR)\vm-limit.obj \
 	$(OUTDIR)\widget.obj \
 	$(OUTDIR)\window.obj \
-	$(NT)\xemacs.res
+	$(OUTDIR)\xemacs.res
 
 # Rules
 
 .SUFFIXES:	.c
 
 # nmake rule
+!if $(DEBUG_XEMACS)
 {$(TEMACS_SRC)}.c{$(OUTDIR)}.obj:
-	$(CCV) $(TEMACS_CPP_FLAGS) $< -Fo$@ -Fr$*.sbr
+	$(CCV) $(TEMACS_CPP_FLAGS) $< -Fo$@ -Fr$*.sbr -Fd$(OUTDIR)\temacs.pdb
+!else
+{$(TEMACS_SRC)}.c{$(OUTDIR)}.obj:
+	$(CCV) $(TEMACS_CPP_FLAGS) $< -Fo$@
+!endif
 
 $(OUTDIR)\TopLevelEmacsShell.obj:	$(TEMACS_SRC)\EmacsShell-sub.c
 	$(CCV) $(TEMACS_CPP_FLAGS) -DDEFINE_TOP_LEVEL_EMACS_SHELL $** -Fo$@
 #	!"cd $(TEMACS_SRC); cp paths.h.in paths.h"
 
 $(TEMACS): $(TEMACS_INCLUDES) $(TEMACS_OBJS)
+!if $(DEBUG_XEMACS)
+	@dir /b/s $(OUTDIR)\*.sbr > bscmake.tmp
+	bscmake -nologo -o$(TEMACS_BROWSE) @bscmake.tmp
+	@del bscmake.tmp
+!endif
 	link.exe @<<
   $(TEMACS_LFLAGS) $(TEMACS_OBJS) $(TEMACS_LIBS)
 <<
 
-$(NT)\xemacs.res: xemacs.rc
-	rc xemacs.rc
-
-# MSDEV Source Broswer file. "*.sbr" is too inclusive but this is harmless
-$(TEMACS_BROWSE): $(TEMACS_OBJS)
-	@dir /b/s $(OUTDIR)\*.sbr > bscmake.tmp
-	bscmake -nologo -o$@ @bscmake.tmp
-	@del bscmake.tmp
+$(OUTDIR)\xemacs.res: xemacs.rc
+	rc -Fo$@ xemacs.rc
 
 #------------------------------------------------------------------------------
 
 
 # use this rule to build the complete system
 all:	$(OUTDIR)\nul $(LASTFILE) $(LWLIB) $(LIB_SRC_TOOLS) $(RUNEMACS) \
-	$(TEMACS) $(TEMACS_BROWSE) update-elc $(DOC) dump-xemacs
+	$(TEMACS) update-elc $(DOC) dump-xemacs
 
 temacs: $(TEMACS)
 
 	del *.bak
 	del *.orig
 	del *.rej
+	del *.tmp
+	del Installation
+	del Installation.el
+	cd $(OUTDIR)
+	del *.lib
+	del *.obj
 	del *.pdb
-	del *.tmp
-	cd $(OUTDIR)
-	del *.obj
+	del *.res
 	del *.sbr
-	del *.lib
 	cd $(XEMACS)\$(TEMACS_DIR)
 	del puresize-adjust.h
 	del config.h
 	del *.orig
 	del *.rej
 	del *.exe
+	del *.obj
+	del *.pdb
+	del *.res
 	del $(CONFIG_VALUES)
 	cd $(LISP)
 	-del /s /q *.bak *.elc *.orig *.rej

File src/.cvsignore

 puresize-adjust.h
 sheap-adjust.h
 temacs
+xemacs
 SATISFIED
 update-elc.stamp

File src/ChangeLog

+1999-03-12  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+	* XEmacs 21.2.13 is released
+
+1999-03-12  SL Baur  <steve@xemacs.org>
+
+	* file-coding.c: Guard ucs table initialization with ifdef MULE.
+
+1999-03-10  Stephen J. Turnbull  <turnbull@sk.tsukuba.ac.jp>
+
+	* file-coding.c:  docstring and comment improvements.
+	(decode_ucs4)  flag possible data loss with comment.
+
+1999-03-10  Martin Buchholz  <martin@xemacs.org>
+
+	* file-coding.c (Fset_ucs_char): add CHECK_INT, CHECK_CHAR
+	(ucs_to_char):
+	(Fucs_char):
+	(Fset_char_ucs):
+	(decode_coding_ucs4):
+	(encode_coding_ucs4):
+	(detect_coding_utf8):
+	(decode_coding_utf8):
+	(encode_utf8):
+	(encode_coding_utf8):
+	Add CHECK_* macros where needed to avoid crashes.
+	#ifdef out all composite character support using
+	#ifdef ENABLE_COMPOSITE_CHARS
+	Use normal XEmacs coding standards.
+	Fix docstrings.
+	Remove CODING_STREAM_COMPOSE, CODING_STREAM_DECOMPOSE.
+
+1998-09-08  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* file-coding.c (make-coding-system): Add description about
+	`ucs-4' and `utf-8'.
+	(detection_state): Modify to implement ucs-4 and utf-8.
+	(detect_coding_type): Likewise.
+	(detect_coding_ucs4): New implementation.
+	(detect_coding_utf8): New implementation.
+	(encode_utf8): fixed.
+	(syms_of_mule_coding): Rename `ucs4' and `utf8' to `ucs-4' and
+	`utf-8'.
+
+1998-09-08  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* file-coding.c (mule_char_to_ucs4): Encode 94x94 chars in ISO
+	2022 registry to private area.
+
+1998-09-07  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* file-coding.c (encode_utf8): New function.
+	(encode_coding_utf8): New implementation.
+
+1998-09-07  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* file-coding.c (ucs_to_mule_table): New variable; abolish
+	`Vucs_to_mule_table'
+	(mule_to_ucs_table): renamed from `Vmule_to_ucs_table'.
+	(set-ucs-char): New function.
+	(ucs_to_char): New function.
+	(ucs-char): New function.
+	(set-char-ucs): New function.
+	(char-ucs): New function.
+	(decode_ucs4): Use `ucs_to_char'.
+	(complex_vars_of_mule_coding): Abolish `ucs-to-mule-table' and
+	`mule-to-ucs-table'.
+
+1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* chartab.h: EXFUN `Fget_char_table'.
+
+	* file-coding.c (encode_ucs4): New function.
+	(encode_coding_ucs4): Use `encode_ucs4'.
+
+1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* file-coding.c (decode_coding_ucs4): New implementation.
+
+1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* file-coding.c (decode_coding_ucs4): fixed.
+
+	* file-coding.c (Vmule_to_ucs_table): New variable.
+	(mule_char_to_ucs4): New function.
+	(encode_coding_ucs4): New implementation.
+	(complex_vars_of_mule_coding): Define variable
+	`mule-to-ucs-table'.
+
+1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* file-coding.c (decode_coding_utf8): New implementation.
+
+1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* file-coding.c (decode_coding_utf8): fixed.
+
+1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* file-coding.c (Vucs_to_mule_table): New variable.
+	(decode_ucs4): Refer `Vucs_to_mule_table'.
+	(complex_vars_of_mule_coding): Define variable
+	`ucs-to-mule-table'.
+
+1998-09-04  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* file-coding.c (detect_coding_ucs4): New function (not
+	implemented yet).
+	(decode_coding_ucs4): New function.
+	(encode_coding_ucs4): New function (not implemented yet).
+	(detect_coding_utf8): New function (not implemented yet).
+	(decode_coding_utf8): New function.
+	(encode_coding_utf8): New function (not implemented yet).
+	(make-coding-system): New type `ucs4' and `utf8'.
+	(coding-system-type): Likewise.
+	(detection_state): Add `ucs4' and `utf8'.
+	(detect_coding_type): Likewise.
+	(mule_decode): Use `decode_coding_ucs4' and `decode_coding_utf8'.
+	(mule_encode): Use `encode_coding_ucs4' and `encode_coding_utf8'.
+	(decode_ucs4): New function (very incomplete).
+	(syms_of_mule_coding): Add `ucs4' and `utf8'.
+
+	* file-coding.h: Add definitions for UCS-4 and UTF-8.
+
+1999-03-08  Martin Buchholz  <martin@xemacs.org>
+
+	* mule-charset.c:
+	(non_ascii_valid_char_p):
+	(lookup_composite_char):
+	(composite_char_string):
+	(make-composite-char):
+	(composite-char-string):
+	(syms_of_mule_charset): 
+	(complex_vars_of_mule_charset): 
+	* mule-charset.h (LEADING_BYTE_COMPOSITE):
+	(CHAR_LEADING_BYTE):
+	(MAKE_CHAR):
+	* file-coding.h (CODING_STATE_COMPOSITE):
+	(CODING_STATE_ISO2022_LOCK):
+	(iso_esc_flag):
+	(LEADING_BYTE_COMPOSITE):
+	* file-coding.c (struct iso2022_decoder):
+	(decoding_closer):
+	(reset_iso2022):
+	(parse_iso2022_esc):
+	(encode_coding_iso2022):
+	#ifdef out all composite character support using 
+	#ifdef ENABLE_COMPOSITE_CHARS 
+
+	* alloc.c: Define lrecord_coding_system only if ! FILE_CODING
+
+1999-03-04  Takeshi YAMADA <yamada@cslab.kecl.ntt.co.jp>
+
+	* fns.c (Fbase64_encode_string): Calculate `allength' in the same
+	way of `Fbase64_encode_region'.
+
+1999-02-18  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+	* fns.c (base64_encode_1): Don't add a newline at the tail.
+
+1999-03-08  Andy Piper  <andy@xemacs.org>
+
+	* menubar-msw.c (displayable_menu_item): correct off-by-one &
+	handling.
+
+1999-03-07  Martin Buchholz  <martin@xemacs.org>
+
+	* console-stream.h (struct stream_console):
+	* event-unixoid.c (event_stream_unixoid_select_console):
+	(event_stream_unixoid_unselect_console):
+	* print.c (Fexternal_debugging_output):
+	* sysdep.c (reset_one_device):
+	* console-stream.c (stream_init_console):
+	(stream_delete_console):
+	(allocate_stream_console_struct): move into stream_init_console.
+	(free_stream_console_struct): move into stream_delete_console.
+	Use `fd' only for file descriptors.
+	Therefore, rename members of struct stream_console.
+
+	* systime.h: Unix98 says sys/time.h should define select(), but
+	some systems define that in unistd.h.  So include that file always.
+
+	* glyphs.h (MAYBE_IIFORMAT_METH): Don't use leading `_'.  Avoid
+	multiple evaluation of first arg.  Do proper do {} while (0) wrapping.
+	(HAS_IIFORMAT_METH_P): Prevent macro from being used in
+	non-boolean context
+	(MAYBE_IIFORMAT_DEVMETH): Use standard internal macro naming convention.
+
+	* EmacsShell.c:
+	* balloon_help.c:
+	Add #include <stdio.h>.
+	Some versions of assert.h use printf() without #include'ing stdio.h
+
+	* free-hook.c (blocktype): Add gcpro5_type to blocktype.
+	(log_gcpro): Remove unused variable FRAME.
+	(show_gcprohist): Ansify.
+	Comment the #endif's
+
+	* frame-x.c (x_delete_frame): Don't use FRAME_X_SHELL_WIDGET(f)
+	after it's just been XtDestroy'ed!
+
+1999-02-18  Martin Buchholz  <martin@xemacs.org>
+
+	* opaque.c (print_opaque):
+	(sizeof_opaque):
+	(equal_opaque):
+	(hash_opaque):
+	Egcs 1.1.1 seems to have a bug where
+	INTP (p->size_or_chain)
+	will crash XEmacs.  Fix by introducing intermediate variable.
+
+	* sound.c (Fdevice_sound_enabled_p): Fix compiler warning.
+
+	* dired.c (Fdirectory_files):
+	(Ffile_name_completion):
+	(Ffile_name_all_completions):
+	(file_name_completion):
+	- Use `directory' instead of `dirname' to sync with FSF Emacs and
+	avoid compiler warnings.
+	- Fix up docstrings so that C variables match documentation.
+
+1999-03-05  Martin Buchholz  <martin@xemacs.org>
+
+	* alloc.c: (garbage_collect_1): Reorg code to make scope of local
+	variables as small as possible to help out the compiler and the maintainer.
+
+	* alloc.c: (disksave_object_finalization):
+	Set all the *-load-path variables to
+	nil, not just load-path itself.  This gets the locate-file hash
+	tables garbage collected BEFORE dump, and has the side effect of
+	preventing crashes on OSF4.0+egcs.
+
+	* alloc.c:
+	* gdbinit:
+	* dbxrc:
+	- Clean up gdb/dbx debugging support.
+	- Storing an EMACS_INT in an enum is not 64-bit clean!
+	- So change the enum to a set of separate variables.
+	- Add test cases to help debug the debugging support!
+	- Add `lisp-shadows' and `run-temacs' targets for dbx.
+	- Both dbx and gdb have been tested now.
+
 1999-03-05  XEmacs Build Bot <builds@cvs.xemacs.org>
 
 	* XEmacs 21.2.12 is released
 	* s/cygwin32.h (BROKEN_SIGIO): don't define this as it causes
 	major lockups.
 
+1999-02-16  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* fns.c (Fbase64_encode_string): New optional argument
+	`NO_LINE_BREAK'.
+
 1999-02-16  Martin Buchholz  <martin@xemacs.org>
 
 	* gdbinit:  Fix up commands to run temacs.  Add lisp-shadows command.

File src/EmacsShell.c

 
 #include <config.h>
 
+#include <stdio.h>
 #include <assert.h>
 #include <stdlib.h>
 #include <X11/StringDefs.h>
 /************************************************************************/
 /*			  Debugger support				*/
 /************************************************************************/
-/* Give gdb/dbx enough information to decode Lisp Objects.
-   We make sure certain symbols are defined, so gdb doesn't complain
-   about expressions in src/gdbinit.  Values are randomly chosen.
-   See src/gdbinit or src/dbxrc to see how this is used.  */
-
-enum dbg_constants
-{
+/* Give gdb/dbx enough information to decode Lisp Objects.  We make
+   sure certain symbols are always defined, so gdb doesn't complain
+   about expressions in src/gdbinit.  See src/gdbinit or src/dbxrc to
+   see how this is used.  */
+
 #ifdef USE_MINIMAL_TAGBITS
-  dbg_valmask = (EMACS_INT) (((1UL << VALBITS) - 1) << GCBITS),
-  dbg_typemask = (EMACS_INT) ((1UL << GCTYPEBITS) - 1),
-  dbg_USE_MINIMAL_TAGBITS = 1,
-  dbg_Lisp_Type_Int = 100,
-#else /* ! USE_MIMIMAL_TAGBITS */
-  dbg_valmask = (EMACS_INT) ((1UL << VALBITS) - 1),
-  dbg_typemask = (EMACS_INT) (((1UL << GCTYPEBITS) - 1) << (VALBITS + GCMARKBITS)),
-  dbg_USE_MINIMAL_TAGBITS = 0,
-  dbg_Lisp_Type_Int = Lisp_Type_Int,
-#endif /* ! USE_MIMIMAL_TAGBITS */
+EMACS_UINT dbg_valmask = ((1UL << VALBITS) - 1) << GCBITS;
+EMACS_UINT dbg_typemask = (1UL << GCTYPEBITS) - 1;
+unsigned char dbg_USE_MINIMAL_TAGBITS = 1;
+unsigned char Lisp_Type_Int = 100;
+#else
+EMACS_UINT dbg_valmask = (1UL << VALBITS) - 1;
+EMACS_UINT dbg_typemask = ((1UL << GCTYPEBITS) - 1) << (VALBITS + GCMARKBITS);
+unsigned char dbg_USE_MINIMAL_TAGBITS = 0;
+#endif
 
 #ifdef USE_UNION_TYPE
-  dbg_USE_UNION_TYPE = 1,
+unsigned char dbg_USE_UNION_TYPE = 1;
 #else
-  dbg_USE_UNION_TYPE = 0,
+unsigned char dbg_USE_UNION_TYPE = 0;
 #endif
 
 #ifdef USE_INDEXED_LRECORD_IMPLEMENTATION
-  dbg_USE_INDEXED_LRECORD_IMPLEMENTATION = 1,
+unsigned char dbg_USE_INDEXED_LRECORD_IMPLEMENTATION = 1;
 #else
-  dbg_USE_INDEXED_LRECORD_IMPLEMENTATION = 0,
+unsigned char dbg_USE_INDEXED_LRECORD_IMPLEMENTATION = 0;
 #endif
 
-  dbg_Lisp_Type_Char = Lisp_Type_Char,
-  dbg_Lisp_Type_Record = Lisp_Type_Record,
 #ifdef LRECORD_CONS
-  dbg_Lisp_Type_Cons = 101,
+unsigned char Lisp_Type_Cons = 101;
 #else
-  dbg_Lisp_Type_Cons = Lisp_Type_Cons,
-  lrecord_cons = 201,
+unsigned char lrecord_cons;
 #endif
+
 #ifdef LRECORD_STRING
-  dbg_Lisp_Type_String = 102,
+unsigned char Lisp_Type_String = 102;
 #else
-  dbg_Lisp_Type_String = Lisp_Type_String,
-  lrecord_string = 202,
+unsigned char lrecord_string;
 #endif
+
 #ifdef LRECORD_VECTOR
-  dbg_Lisp_Type_Vector = 103,
+unsigned char Lisp_Type_Vector = 103;
 #else
-  dbg_Lisp_Type_Vector = Lisp_Type_Vector,
-  lrecord_vector = 203,
+unsigned char lrecord_vector;
 #endif
+
 #ifdef LRECORD_SYMBOL
-  dbg_Lisp_Type_Symbol = 104,
+unsigned char Lisp_Type_Symbol = 104;
 #else
-  dbg_Lisp_Type_Symbol = Lisp_Type_Symbol,
-  lrecord_symbol = 204,
+unsigned char lrecord_symbol;
 #endif
+
 #ifndef MULE
-  lrecord_char_table_entry = 205,
-  lrecord_charset          = 206,
-  lrecord_coding_system    = 207,
+unsigned char lrecord_char_table_entry;
+unsigned char lrecord_charset;
+#ifndef FILE_CODING
+unsigned char lrecord_coding_system;
 #endif
+#endif
+
 #ifndef HAVE_TOOLBARS
-  lrecord_toolbar_button   = 208,
+unsigned char lrecord_toolbar_button;
 #endif
-#ifndef HAVE_TOOLTALK
-  lrecord_tooltalk_message = 210,
-  lrecord_tooltalk_pattern = 211,
+
+#ifndef TOOLTALK
+unsigned char lrecord_tooltalk_message;
+unsigned char lrecord_tooltalk_pattern;
 #endif
+
 #ifndef HAVE_DATABASE
-  lrecord_database = 212,
+unsigned char lrecord_database;
 #endif
-  dbg_valbits = VALBITS,
-  dbg_gctypebits = GCTYPEBITS
-  /* If we don't have an actual object of this enum, pgcc (and perhaps
-     other compilers) might optimize away the entire type declaration :-( */
-} dbg_dummy;
-
-/* A few macros turned into functions for ease of debugging.
+
+unsigned char dbg_valbits = VALBITS;
+unsigned char dbg_gctypebits = GCTYPEBITS;
+
+/* Macros turned into functions for ease of debugging.
    Debuggers don't know about macros! */
 int dbg_eq (Lisp_Object obj1, Lisp_Object obj2);
 int
   Vexec_path = Qnil;
   Vload_path = Qnil;
   /* Vdump_load_path = Qnil; */
+  /* Release hash tables for locate_file */
+  Fset (intern ("early-package-load-path"), Qnil);
+  Fset (intern ("late-package-load-path"),  Qnil);
+  Fset (intern ("last-package-load-path"),  Qnil);
   uncache_home_directory();
 
 #if defined(LOADHIST) && !(defined(LOADHIST_DUMPED) || \
   char stack_top_variable;
   extern char *stack_bottom;
 #endif
-  int i;
   struct frame *f;
   int speccount;
   int cursor_changed;
   cleanup_specifiers ();
 
   /* Mark all the special slots that serve as the roots of accessibility. */
-  {
+
+  { /* staticpro() */
+    int i;
+    for (i = 0; i < staticidx; i++)
+      mark_object (*(staticvec[i]));
+  }
+
+  { /* GCPRO() */
     struct gcpro *tail;
-    struct catchtag *catch;
-    struct backtrace *backlist;
+    int i;
+    for (tail = gcprolist; tail; tail = tail->next)
+      for (i = 0; i < tail->nvars; i++)
+	mark_object (tail->var[i]);
+  }
+
+  { /* specbind() */
     struct specbinding *bind;
-
-    for (i = 0; i < staticidx; i++)
-      {
-        mark_object (*(staticvec[i]));
-      }
-
-    for (tail = gcprolist; tail; tail = tail->next)
-      {
-	for (i = 0; i < tail->nvars; i++)
-	  mark_object (tail->var[i]);
-      }
-
     for (bind = specpdl; bind != specpdl_ptr; bind++)
       {
 	mark_object (bind->symbol);
 	mark_object (bind->old_value);
       }
-
+  }
+
+  {
+    struct catchtag *catch;
     for (catch = catchlist; catch; catch = catch->next)
       {
 	mark_object (catch->tag);
 	mark_object (catch->val);
       }
-
+  }
+
+  {
+    struct backtrace *backlist;
     for (backlist = backtrace_list; backlist; backlist = backlist->next)
       {
 	int nargs = backlist->nargs;
+	int i;
 
 	mark_object (*backlist->function);
 	if (nargs == UNEVALLED || nargs == MANY)
 	  for (i = 0; i < nargs; i++)
 	    mark_object (backlist->args[i]);
       }
-
-    mark_redisplay (mark_object);
-    mark_profiling_info (mark_object);
   }
 
+  mark_redisplay (mark_object);
+  mark_profiling_info (mark_object);
+
   /* OK, now do the after-mark stuff.  This is for things that
      are only marked when something else is marked (e.g. weak hash tables).
      There may be complex dependencies between such objects -- e.g.

File src/balloon_help.c

 #include <config.h>
 #include <string.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <assert.h>
 
 #include <X11/Xlib.h>

File src/chartab.h

 EXFUN (Fcopy_char_table, 1);
 EXFUN (Fmake_char_table, 1);
 EXFUN (Fput_char_table, 3);
+EXFUN (Fget_char_table, 2);
 
 extern Lisp_Object Vall_syntax_tables;
 

File src/console-stream.c

 Lisp_Object Vstdio_str;
 
 static void
-allocate_stream_console_struct (struct console *con)
-{
-  if (!CONSOLE_STREAM_DATA (con))
-    CONSOLE_STREAM_DATA (con) = xnew_and_zero (struct stream_console);
-  else
-    xzero (*CONSOLE_STREAM_DATA (con));
-}
-
-static void
 stream_init_console (struct console *con, Lisp_Object params)
 {
   Lisp_Object tty = CONSOLE_CONNECTION (con);
-  FILE *infd, *outfd, *errfd;
+  struct stream_console *stream_con;
+
+  if (CONSOLE_STREAM_DATA (con) == NULL)
+    CONSOLE_STREAM_DATA (con) = xnew (struct stream_console);
+
+  stream_con = CONSOLE_STREAM_DATA (con);
+
+  stream_con->needs_newline = 0;
 
   /* Open the specified console */
-
   if (NILP (tty) || internal_equal (tty, Vstdio_str, 0))
     {
-      infd  = stdin;
-      outfd = stdout;
-      errfd = stderr;
+      stream_con->in  = stdin;
+      stream_con->out = stdout;
+      stream_con->err = stderr;
     }
   else
     {
       CHECK_STRING (tty);
-      infd = outfd = errfd =
+      stream_con->in = stream_con->out = stream_con->err =
 	fopen ((char *) XSTRING_DATA (tty), "r+");
-      if (!infd)
+      if (!stream_con->in)
 	error ("Unable to open tty %s", XSTRING_DATA (tty));
     }
-
-  allocate_stream_console_struct (con);
-  CONSOLE_STREAM_DATA (con)->infd  = infd;
-  CONSOLE_STREAM_DATA (con)->outfd = outfd;
-  CONSOLE_STREAM_DATA (con)->errfd = errfd;
 }
 
 static void
 {
   struct console *con = XCONSOLE (DEVICE_CONSOLE (d));
 
-  DEVICE_INFD  (d) = fileno (CONSOLE_STREAM_DATA (con)->infd);
-  DEVICE_OUTFD (d) = fileno (CONSOLE_STREAM_DATA (con)->outfd);
+  DEVICE_INFD  (d) = fileno (CONSOLE_STREAM_DATA (con)->in);
+  DEVICE_OUTFD (d) = fileno (CONSOLE_STREAM_DATA (con)->out);
   init_baud_rate (d);
   init_one_device (d);
 }
   return noninteractive && initialized;
 }
 
-static void
-free_stream_console_struct (struct console *con)
-{
-  if (CONSOLE_STREAM_DATA (con))
-    {
-      xfree (CONSOLE_STREAM_DATA (con));
-      CONSOLE_STREAM_DATA (con) = NULL;
-    }
-}
-
 extern int stdout_needs_newline;
 
 static void
 stream_delete_console (struct console *con)
 {
-  if (/* CONSOLE_STREAM_DATA (con)->needs_newline */
-      stdout_needs_newline) /* #### clean this up */
+  struct stream_console *stream_con = CONSOLE_STREAM_DATA (con);
+  if (stream_con)
     {
-      fputc ('\n', CONSOLE_STREAM_DATA (con)->outfd);
-      fflush (CONSOLE_STREAM_DATA (con)->outfd);
+      if (/* stream_con->needs_newline */
+	  stdout_needs_newline) /* #### clean this up */
+	{
+	  fputc ('\n', stream_con->out);
+	  fflush (stream_con->out);
+	}
+      if (stream_con->in != stdin)
+	fclose (stream_con->in);
+
+      xfree (stream_con);
+      CONSOLE_STREAM_DATA (con) = NULL;
     }
-  if (CONSOLE_STREAM_DATA (con)->infd != stdin)
-    fclose (CONSOLE_STREAM_DATA (con)->infd);
-  free_stream_console_struct (con);
 }
 
 Lisp_Object
 static void
 stream_clear_region (Lisp_Object window, struct device* d, struct frame * f,
 		  face_index findex, int x, int y,
-		  int width, int height, Lisp_Object fcolor, Lisp_Object bcolor, 
+		  int width, int height, Lisp_Object fcolor, Lisp_Object bcolor,
 		  Lisp_Object background_pixmap)
 {
 }
 stream_ring_bell (struct device *d, int volume, int pitch, int duration)
 {
   struct console *c = XCONSOLE (DEVICE_CONSOLE (d));
-  fputc (07, CONSOLE_STREAM_DATA (c)->outfd);
-  fflush (CONSOLE_STREAM_DATA (c)->outfd);
+  fputc (07, CONSOLE_STREAM_DATA (c)->out);
+  fflush (CONSOLE_STREAM_DATA (c)->out);
 }
 
 

File src/console-stream.h

 
 struct stream_console
 {
-  FILE *infd, *outfd, *errfd;
+  FILE *in;
+  FILE *out;
+  FILE *err;
   int needs_newline;
 };
 
 
 # A bug in dbx prevents string variables from having values beginning with `-'!!
 function XEmacsInit {
-  eval $(echo $(whatis -t `alloc.c`dbg_constants) | \
-    perl -e 'print "@{[map {s/=(-\d+)/sprintf(q[=0x%x],$1)/oge; /\w+=[0-9a-fx]+/og} <>]}\n"')
+  function ToInt { eval "$1=\$[(int) $1]"; }
+  ToInt dbg_USE_MINIMAL_TAGBITS
+  ToInt dbg_USE_UNION_TYPE
+  ToInt dbg_USE_INDEXED_LRECORD_IMPLEMENTATION
+  ToInt Lisp_Type_Int
+  ToInt Lisp_Type_Char
+  ToInt Lisp_Type_Cons
+  ToInt Lisp_Type_String
+  ToInt Lisp_Type_Vector
+  ToInt Lisp_Type_Symbol
+  ToInt Lisp_Type_Record
+  ToInt dbg_valbits
+  ToInt dbg_gctypebits
+  function ToLong { eval "$1=\$[(unsigned long) $1]"; }
+  ToLong dbg_valmask
+  ToLong dbg_typemask
   xemacs_initted=yes
-  #printvar dbg_valbits dbg_valmask
 }
 
 function printvar {
     if test $[(int)($obj & 1)] = 1; then
       # It's an int
       val=$[(long)(((unsigned long long)$obj) >> 1)]
-      type=$dbg_Lisp_Type_Int
+      type=$Lisp_Type_Int
     else
       type=$[(int)(((void*)$obj) & $dbg_typemask)]
-      if test $type = $dbg_Lisp_Type_Char; then
+      if test $type = $Lisp_Type_Char; then
         val=$[(void*)(long)(((unsigned long long)($obj & $dbg_valmask)) >> $dbg_gctypebits)]
       else
         # It's a record pointer
   else
     # not dbg_USE_MINIMAL_TAGBITS
     type=$[(int)(((unsigned long long)($obj & $dbg_typemask)) >> ($dbg_valbits + 1))]
-    if test "$[$type == Lisp_Type_Int]" = 1; then
+    if test "$type" = $Lisp_Type_Int; then
       val=$[(int)($obj & $dbg_valmask)]
-    elif test "$[$type == Lisp_Type_Char]" = 1; then
+    elif test "$type" = $Lisp_Type_Char; then
       val=$[(int)($obj & $dbg_valmask)]
     else
       val=$[(void*)($obj & $dbg_valmask)]
     #printvar val type obj
   fi
 
-  if test $type = $dbg_Lisp_Type_Record; then
+  if test $type = $Lisp_Type_Record; then
     typeset lheader="((struct lrecord_header *) $val)"
     if test $dbg_USE_INDEXED_LRECORD_IMPLEMENTATION = 1; then
       imp=$[(void*)(lrecord_implementations_table[$lheader->type])]
   else
     imp="0xdeadbeef"
   fi
-  #printvar obj val type imp
+  # printvar obj val type imp
 }
 
 function xint {
 
 function xtype {
   decode_object "$*"
-  if   test $type = $dbg_Lisp_Type_Int;    then echo "int"
-  elif test $type = $dbg_Lisp_Type_Char;   then echo "char"
-  elif test $type = $dbg_Lisp_Type_Symbol; then echo "symbol"
-  elif test $type = $dbg_Lisp_Type_String; then echo "string"
-  elif test $type = $dbg_Lisp_Type_Vector; then echo "vector"
-  elif test $type = $dbg_Lisp_Type_Cons;   then echo "cons"
-  elif test $type = null_pointer;          then echo "$type"
+  if   test $type = $Lisp_Type_Int;    then echo "int"
+  elif test $type = $Lisp_Type_Char;   then echo "char"
+  elif test $type = $Lisp_Type_Symbol; then echo "symbol"
+  elif test $type = $Lisp_Type_String; then echo "string"
+  elif test $type = $Lisp_Type_Vector; then echo "vector"
+  elif test $type = $Lisp_Type_Cons;   then echo "cons"
+  elif test $type = null_pointer;      then echo "null_pointer"
   else
     echo "record type with name: $[((struct lrecord_implementation *)$imp)->name]"
   fi
 }
 
+function lisp-shadows {
+  run -batch -vanilla -f list-load-path-shadows
+}
+
+function environment-to-run-temacs {
+  unset EMACSLOADPATH
+  export EMACSBOOTSTRAPLOADPATH=../lisp/:..
+  export EMACSBOOTSTRAPMODULEPATH=../modules/:..
+}
+
 document run-temacs << 'end'
 Usage: run-temacs
 Run temacs interactively, like xemacs.
 end
 
 function run-temacs {
-  unset EMACSLOADPATH
-  export EMACSBOOTSTRAPLOADPATH=../lisp/:..
+  environment-to-run-temacs
   run -batch -l ../lisp/loadup.el run-temacs -q
 }
 
 end
 
 function update-elc {
-  unset EMACSLOADPATH
-  export EMACSBOOTSTRAPLOADPATH=../lisp/:..
+  environment-to-run-temacs
   run -batch -l ../lisp/update-elc.el
 }
 
 
 function dump-temacs {
-  unset EMACSLOADPATH
-  export EMACSBOOTSTRAPLOADPATH=../lisp/:..
+  environment-to-run-temacs
   run -batch -l ../lisp/loadup.el dump
 }
 
 
 function pobj {
   decode_object $1
-  if test $type = $dbg_Lisp_Type_Int; then
+  if test $type = $Lisp_Type_Int; then
     print -f"Integer: %d" $val
-  elif test $type = $dbg_Lisp_Type_Char; then
-    if $val < 128; then
+  elif test $type = $Lisp_Type_Char; then
+    if test $[$val > 32 && $val < 128] = 1; then
       print -f"Char: %c" $val
     else
       print -f"Char: %d" $val
     fi
-  elif test $type = $dbg_Lisp_Type_String || lrecord_type_p string; then
+  elif test $type = $Lisp_Type_String || lrecord_type_p string; then
     pstruct Lisp_String
-  elif test $type = $dbg_Lisp_Type_Cons   || lrecord_type_p cons; then
+  elif test $type = $Lisp_Type_Cons   || lrecord_type_p cons; then
     pstruct Lisp_Cons
-  elif test $type = $dbg_Lisp_Type_Symbol || lrecord_type_p symbol; then
+  elif test $type = $Lisp_Type_Symbol || lrecord_type_p symbol; then
     pstruct Lisp_Symbol
-    echo "Symbol name: $[(char *)($xstruct->name->_data)]"
-  elif test $type = $dbg_Lisp_Type_Vector || lrecord_type_p vector; then
+    echo "Symbol name: $[(char *)($xstruct->name->data)]"
+  elif test $type = $Lisp_Type_Vector || lrecord_type_p vector; then
     pstruct Lisp_Vector
     echo "Vector of length $[$xstruct->size]"
   elif lrecord_type_p bit_vector; then
 function print_shell {
   print *(`frame-x.c`TopLevelShellRec*) (((struct `frame-x.c`x_frame*) (((struct `frame-x.c`frame*) (Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget)
 }
+
+# -------------------------------------------------------------
+# functions to test the debugging support itself.
+# If you change this file, make sure the following still work...
+# -------------------------------------------------------------
+function test_xtype {
+  function doit { echo -n "$1: "; xtype "$1"; }
+  test_various_objects
+}
+
+function test_pobj {
+  function doit { echo '==============================='; echo -n "$1: "; pobj "$1"; }
+  test_various_objects
+}
+
+function test_various_objects {
+  doit Vemacs_major_version
+  doit Vhelp_char
+  doit Qnil
+  doit Qunbound
+  doit Vobarray
+  doit Vall_weak_lists
+  doit Vxemacs_codename
+}
  if FILES-ONLY is nil (the default) then both files and subdirectories will
  be returned.
 */
-       (dirname, full, match, nosort, files_only))
+       (directory, full, match, nosort, files_only))
 {
   /* This function can GC */
   DIR *d;
   Lisp_Object list = Qnil;
-  Bytecount dirnamelen;
+  Bytecount directorylen;
   Lisp_Object handler;
   struct re_pattern_buffer *bufp = NULL;
   int speccount = specpdl_depth ();
   char *statbuf, *statbuf_tail;
 
   struct gcpro gcpro1, gcpro2;
-  GCPRO2 (dirname, list);
+  GCPRO2 (directory, list);
 
   /* If the file name has special constructs in it,
      call the corresponding file handler.  */
-  handler = Ffind_file_name_handler (dirname, Qdirectory_files);
+  handler = Ffind_file_name_handler (directory, Qdirectory_files);
   if (!NILP (handler))
     {
       UNGCPRO;
       if (!NILP (files_only))
-	return call6 (handler, Qdirectory_files, dirname, full, match, nosort,
-		      files_only);
+	return call6 (handler, Qdirectory_files, directory, full, match,
+		      nosort, files_only);
       else
-	return call5 (handler, Qdirectory_files, dirname, full, match,
+	return call5 (handler, Qdirectory_files, directory, full, match,
 		      nosort);
     }
 
   /* #### why do we do Fexpand_file_name after file handlers here,
      but earlier everywhere else? */
-  dirname = Fexpand_file_name (dirname, Qnil);
-  dirname = Ffile_name_as_directory (dirname);
-  dirnamelen = XSTRING_LENGTH (dirname);
+  directory = Fexpand_file_name (directory, Qnil);