changeset 94:1040fe1366ac xemacs-20-0f2

Import from CVS: tag xemacs-20-0f2
author cvs
date Mon, 13 Aug 2007 09:12:09 +0200
parents 486ff617c2a1
children e8c07a565f9c
files CHANGES-beta ChangeLog Makefile.in lisp/ChangeLog lisp/iso/iso-acc.el lisp/modes/make-mode.el lisp/mule/european-hooks.el lisp/packages/metamail.el lisp/utils/skeleton.el lisp/version.el src/ChangeLog src/database.c src/emacs.c src/eval.c src/glyphs.h src/redisplay.c
diffstat 16 files changed, 162 insertions(+), 100 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES-beta	Mon Aug 13 09:11:41 2007 +0200
+++ b/CHANGES-beta	Mon Aug 13 09:12:09 2007 +0200
@@ -1,5 +1,8 @@
 							-*- indented-text -*-
 to 20.0 final
+-- Miscellaneous bug fixes
+
+to 20.0 final
 -- iso-acc.el updated courtesy of Alexandre Oliva
 -- Miscellaneous bug fixes
 
--- a/ChangeLog	Mon Aug 13 09:11:41 2007 +0200
+++ b/ChangeLog	Mon Aug 13 09:12:09 2007 +0200
@@ -1,7 +1,15 @@
+Wed Feb  5 18:03:06 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* XEmacs 20.0 is released.
+
+Wed Feb  3 19:39:08 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* XEmacs 19.15-b92 is released.
+
 Sat Feb  1 18:17:38 1997  Steven L Baur <steve@altair.xemacs.org>
 
 	* XEmacs 20.0 is released.
-	* XEmacs 19.15b-91 AKA XEmacs '97 NOT! is released.
+	* XEmacs 19.15-b91 AKA XEmacs '97 NOT! is released.
 
 Sat Feb  1 00:00:48 1997  Steven L Baur  <steve@altair.xemacs.org>
 
--- a/Makefile.in	Mon Aug 13 09:11:41 2007 +0200
+++ b/Makefile.in	Mon Aug 13 09:12:09 2007 +0200
@@ -397,7 +397,6 @@
 	   for f in *.info* ; do \
 	     ${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f ; \
 	     chmod 0644 ${infodir}/$$f; \
-	     gzip -9 -f ${infodir}/$$f; \
 	   done); \
 	else true; fi
 	cd ${srcdir}/etc && for page in xemacs etags ctags gnuserv \
--- a/lisp/ChangeLog	Mon Aug 13 09:11:41 2007 +0200
+++ b/lisp/ChangeLog	Mon Aug 13 09:12:09 2007 +0200
@@ -1,3 +1,24 @@
+Tue Feb  4 11:51:25 1997  Greg Klanderman  <greg@alphatech.com>
+
+	* modes/make-mode.el: Remove `makefile-runtime-macros-list' from
+	`makefile-macro-table'.
+
+Tue Feb  4 11:06:33 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* packages/metamail.el (metamail-region): *junet* coding system
+	name changed to 'junet.
+
+Mon Feb  3 22:34:09 1997  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* iso/iso-acc.el: Critical Bug fix.
+	Add ISO-8859-3 support to iso-acc.el, as suggested by Dale
+	Gulledge.
+
+Mon Feb  3 17:11:21 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* modes/make-mode.el (makefile-browser-format-macro-line): Remove
+	redundant (and wrong) format statement.
+
 Fri Jan 31 21:38:47 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* psgml/psgml-html.el (html-auto-sgml-entity-conversion): Allow
--- a/lisp/iso/iso-acc.el	Mon Aug 13 09:11:41 2007 +0200
+++ b/lisp/iso/iso-acc.el	Mon Aug 13 09:12:09 2007 +0200
@@ -3,11 +3,11 @@
 ;; Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc.
 
 ;; Author: Johan Vromans <jv@mh.nl>
-;; Version: 1.8
-;; Maintainer: FSF
+;; Maintainer: Alexandre Oliva <oliva@dcc.unicamp.br>
 ;; Keywords: i18n
 ;; Adapted to XEmacs 19.14 by Alexandre Oliva <oliva@dcc.unicamp.br>
-;; Last update: Jan 25, 1997
+;; $Revision: 1.3 $
+;; $Date: 1997/02/06 02:08:34 $
 
 ;; This file is part of GNU Emacs.
 
@@ -41,15 +41,16 @@
 ;;   "  (second)    -> diaeresis
 ;;   ^  (caret)     -> circumflex
 ;;   ~  (tilde)     -> tilde over the character
-;;   /  (slash)     -> slash through the character.
-;;   ,  (cedilla)   -> cedilla under the character (except on default mode).
-;;		  Also:  /A is A-with-ring and /E is AE ligature.
+;;   /  (slash)     -> slash through the character
+;;   .  (dot)       -> dot over the character
+;;   ,  (cedilla)   -> cedilla under the character (except on default mode)
+;;                  Also:  /A is A-with-ring and /E is AE ligature.
 ;;
 ;; The action taken depends on the key that follows the pseudo accent.
 ;; In general: 
 ;;
 ;;   pseudo-accent + appropriate letter -> accented letter
-;;   pseudo-accent + space -> pseudo-accent (except for comma)
+;;   pseudo-accent + space -> pseudo-accent (except comma)
 ;;   pseudo-accent + pseudo-accent -> accent (if available)
 ;;   pseudo-accent + other -> pseudo-accent + other
 ;;
@@ -72,10 +73,13 @@
 (if (fboundp 'read-event) ()
   (defun read-event () (event-key (next-command-event))))
 
-;; needed to work on GNU Emacs (had to use this function on XEmacs)
-(if (fboundp 'character-to-event) ()
-  (defun character-to-event (ch &optional event console meta)
-    (if (listp ch) (car ch) ch)))
+(if (fboundp 'character-to-event)
+    (defun iso-char-to-event (ch)
+      "returns an event containing the given character"
+      (character-to-event (list ch)))
+  (defun iso-char-to-event (ch)
+    "returns the character itself"
+    ch))
 
 ;; needed for compatibility with XEmacs 19.14 and GNU Emacs 19.30
 (if (fboundp 'this-single-command-keys) ()
@@ -85,6 +89,8 @@
 	(this-command-keys))
     (defun this-single-command-keys () (this-command-keys))))
 
+;; end of compatibility modules
+
 (defvar iso-languages
   '(("portuguese"
      (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
@@ -94,7 +100,8 @@
      (?^ (?A . ?\302) (?E . ?\312) (?O . ?\324) (?a . ?\342) (?e . ?\352)
 	 (?o . ?\364) (?\  . ?^) (space . ?^))
      (?\" (?U . ?\334) (?u . ?\374) (?\  . ?\") (space . ?\"))
-     (?\~ (?A . ?\303) (?O . ?\325) (?a . ?\343) (?o . ?\365) (?\  . ?\~) (space . ?\~))
+     (?\~ (?A . ?\303) (?O . ?\325) (?a . ?\343) (?o . ?\365) (?\  . ?\~)
+	  (space . ?\~))
      (?, (?c . ?\347) (?C . ?\307)))
     
     ("irish"
@@ -103,17 +110,44 @@
 	 (?\  . ?') (space . ?')))
     
     ("french"
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-	 (?C . ?\307) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363)
-	 (?u . ?\372) (?c . ?\347) (?\  . ?') (space . ?'))
-     (?` (?A . ?\300) (?E . ?\310) (?a . ?\340) (?e . ?\350) (?\  . ?`) (space . ?`))
+     (?' (?E . ?\311) (?C . ?\307) (?e . ?\351) (?c . ?\347) (?\  . ?')
+	 (space . ?'))
+     (?` (?A . ?\300) (?E . ?\310) (?a . ?\340) (?e . ?\350) (?\  . ?`)
+	 (space . ?`))
      (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333)
 	 (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373)
 	 (?\  . ?^) (space . ?^))
-     (?\" (?U . ?\334) (?u . ?\374) (?\  . ?\") (space . ?\"))
-     (?\~ (?A . ?\303) (?O . ?\325) (?a . ?\343) (?o . ?\365) (?\  . ?\~) (space . ?\~))
+     (?\" (?E . ?\313) (?I . ?\317)  
+          (?e . ?\353) (?i . ?\357) (?\  . ?\") (space . ?\"))
+     (?\~ (?< . ?\253) (?> . ?\273) (?C . ?\307) (?c . ?\347) (?\  . ?\~)
+	  (space . ?\~))
      (?, (?c . ?\347) (?C . ?\307)))
     
+   ;;; ISO-8859-3, developed by D. Dale Gulledge <ddg@cci.com>
+    ("latin-3"
+     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323)
+	 (?U . ?\332) (?a . ?\341) (?e . ?\351) (?i . ?\355)
+     	 (?o . ?\363) (?u . ?\372) (?\  . ?') (space . ?'))
+     (?. (?C . ?\305) (?G . ?\325) (?I . ?\251) (?Z . ?\257)
+	 (?c . ?\345) (?g . ?\365) (?z . ?\277))
+     (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326)
+	  (?U . ?\334) (?a . ?\344) (?e . ?\353) (?i . ?\357)
+	  (?o ?\366) (?u ?\374) (?\  . ?\") (space . ?\"))
+     (?\/ (?\/ . ?\260) (?\  . ?/) (space . ?/))
+     (?\~ (?C . ?\307) (?G . ?\253) (?N . ?\321) (?S . ?\252)
+          (?U . ?\335) (?\~ . ?\270) (?c . ?\347) (?g . ?\273)
+	  (?h . ?\261) (?n . ?\361) (?u . ?\375)
+	  (?\  . ?~) (space . ?~))
+     (?^ (?A . ?\302) (?C . ?\306) (?E . ?\312) (?G . ?\330)
+	 (?H . ?\246) (?I . ?\316) (?J . ?\254) (?O . ?\324)
+	 (?S . ?\336) (?U . ?\333) (?a . ?\342) (?c . ?\346)
+	 (?e . ?\352) (?g . ?\370) (?h . ?\266) (?i . ?\356)
+	 (?j . ?\274) (?o . ?\364) (?s . ?\376) (?u . ?\373)
+	 (?\  . ?^) (space . \^))
+     (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322)
+	 (?U . ?\331) (?a . ?\340) (?e . ?\350) (?i . ?\354)
+	 (?o . ?\362) (?u . ?\371) (?\  . ?`) (space . ?`)))
+
     ("latin-2"
      (?' (?A . ?\301) (?C . ?\306) (?D . ?\320) (?E . ?\311) (?I . ?\315)
 	 (?L . ?\305) (?N . ?\321) (?O . ?\323) (?R . ?\300) (?S . ?\246)
@@ -190,9 +224,9 @@
 See the function `iso-accents-mode'.")
 (make-variable-buffer-local 'iso-accents-mode)
 
-(defvar iso-accents-enable '(?' ?` ?^ ?\" ?~ ?/ ?,)
+(defvar iso-accents-enable '(?' ?` ?^ ?\" ?~ ?/ ?, ?.)
   "*List of accent keys that become prefixes in ISO Accents mode.
-The default is (?' ?` ?^ ?\" ?~ ?/ ?,), which contains all the supported
+The default is (?' ?` ?^ ?\" ?~ ?/ ?, ?.), which contains all the supported
 accent keys.  If you set this variable to a list in which some of those
 characters are missing, the missing ones do not act as accents.
 
@@ -229,15 +263,12 @@
 			  (delete-region (1- (point)) (point)))))
 	 (entry (cdr (assq second-char list))))
     (if entry
-	;; Found it: insert the accented character and
-	;; return a do-nothing key
-        (vector (character-to-event (list entry)))
+	;; Found it: return the mapped char
+        (vector (iso-char-to-event entry))
       ;; Otherwise, advance and schedule the second key for execution.
-      (setq unread-command-events (append
-				   (list
-				    (character-to-event (list second-char)))
-				   unread-command-events))
-      (vector (character-to-event (list first-char))))))
+      (setq unread-command-events (cons (iso-char-to-event second-char)
+					unread-command-events))
+      (vector (iso-char-to-event first-char)))))
 
 ;; It is a matter of taste if you want the minor mode indicated
 ;; in the mode line...
@@ -283,14 +314,13 @@
     ;; Enable electric accents.
     (setq iso-accents-mode t)))
 
-(defvar iso-accents-mode-map nil)
-
 (defun iso-accents-customize (language)
   "Customize the ISO accents machinery for a particular language.
 It selects the customization based on the specifications in the
 `iso-languages' variable."
   (interactive (list (completing-read "Language: " iso-languages nil t)))
-  (let ((table (assoc language iso-languages)) tail acc)
+  (let ((table (assoc language iso-languages))
+	tail)
     (if (not table)
 	(error "Unknown language '%s'" language)
       (setq iso-language language
@@ -299,57 +329,15 @@
 	  (substitute-key-definition
 	   'iso-accents-accent-key nil key-translation-map)
 	(setq key-translation-map (make-sparse-keymap)))
-      (setq iso-accents-mode-map (make-sparse-keymap))
-      (let ((pair (assoc 'iso-accents-mode minor-mode-map-alist)))
-	(if pair
-	    (setcdr pair iso-accents-mode-map)
-	  (let ((l minor-mode-map-alist))
-	    (while (cdr l)
-	      (setq l (cdr l)))
-	    (setcdr l (list (cons 'iso-accents-mode iso-accents-mode-map))))))
       ;; Set up translations for all the characters that are used as
       ;; accent prefixes in this language.
       (setq tail iso-accents-list)
       (while tail
-	(define-key key-translation-map
-	  (vector (character-to-event (list (car (car tail)))))
+	(define-key key-translation-map (vector (iso-char-to-event
+						 (car (car tail))))
 	  'iso-accents-accent-key)
-	(setq acc (cdr (car tail)))
-	(while acc
-	  (define-key iso-accents-mode-map
-	    (vector (character-to-event (list (cdr (car acc)))))
-	    'iso-accents-self-insert-unless-redefined)
-	  (setq acc (cdr acc)))
 	(setq tail (cdr tail))))))
 
-(defun iso-accents-self-insert-unless-redefined (prompt)
-  "Temporarily disables iso-accents-mode, and checks for additional bindings of the keys that produced its invocation.  If no such binding is found, 'self-insert-command is returned"
-  (interactive "p")
-  (let* ((iso-accents-mode nil)
-	 (bind (key-binding (this-command-keys)))
-	 (repeat t) result)
-    (while repeat
-      (setq result
-	    (cond ((or (null bind)
-		       (eq bind 'self-insert-command))
-		   (setq repeat nil)
-		   (self-insert-command prompt))
-		  ((commandp bind)
-		   (setq repeat nil)
-		   (call-interactively bind))
-		  ((or (stringp bind)
-		       (keymapp bind))
-		   (setq repeat nil)
-		   bind)
-		  ((and (consp bind)
-			(stringp (car bind)))
-		   (setq bind (cdr bind)))
-		  ((and (consp bind)
-			(keymapp (car bind)))
-		   (setq bind (lookup-key (car bind) (cdr bind))))
-		  (t (error "Invalid key binding")))))
-    result))
-
 (defun iso-accentuate (start end)
   "Convert two-character sequences in region into accented characters.
 Noninteractively, this operates on text from START to END.
--- a/lisp/modes/make-mode.el	Mon Aug 13 09:11:41 2007 +0200
+++ b/lisp/modes/make-mode.el	Mon Aug 13 09:12:09 2007 +0200
@@ -946,12 +946,11 @@
    target makefile-target-colon))
 
 (defun makefile-browser-format-macro-line (macro selected)
-  (format
    (concat (make-string makefile-browser-leftmost-column ?\ )
 	   (if selected
 	       makefile-browser-selected-mark
 	     makefile-browser-unselected-mark)
-	   (makefile-format-macro-ref macro))))
+	   (makefile-format-macro-ref macro)))
 
 (defun makefile-browser-fill (targets macros)
   (let ((inhibit-read-only t))
@@ -1108,7 +1107,9 @@
   (setq makefile-browser-client (current-buffer))
   (makefile-pickup-targets)
   (makefile-pickup-macros)
-  (makefile-browse makefile-target-table makefile-macro-table))
+  (makefile-browse makefile-target-table
+                   ;; take out the runtime macros which were added for completion sake -gk
+                   (set-difference makefile-macro-table makefile-runtime-macros-list)))
 
 
 
--- a/lisp/mule/european-hooks.el	Mon Aug 13 09:11:41 2007 +0200
+++ b/lisp/mule/european-hooks.el	Mon Aug 13 09:12:09 2007 +0200
@@ -91,8 +91,8 @@
 (define-language-environment 'european
   "European (for Latin-1 through Latin-5)"
   (lambda ()
-    (set-coding-category-system 'iso-8-designate 'iso-8859-1)
-    (set-coding-priority-list '(iso-8-designate iso-8-1))
+    ;(set-coding-category-system 'iso-8-designate 'iso-8859-1)
+    ;(set-coding-priority-list '(iso-8-designate iso-8-1))
     (set-default-file-coding-system    'binary) ; iso-8859-1
     ;;(setq locale-coding-system         'binary) ; iso-8859-1
     (setq process-input-coding-system  'binary) ; iso-8859-1
--- a/lisp/packages/metamail.el	Mon Aug 13 09:11:41 2007 +0200
+++ b/lisp/packages/metamail.el	Mon Aug 13 09:12:09 2007 +0200
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1993, 1996  Masanobu UMEDA
 
 ;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
-;; Version: $Header: /afs/informatik.uni-tuebingen.de/local/web/xemacs/xemacs-cvs/XEmacs/xemacs/lisp/packages/Attic/metamail.el,v 1.1.1.1 1996/12/18 22:42:53 steve Exp $
+;; Version: $Header: /afs/informatik.uni-tuebingen.de/local/web/xemacs/xemacs-cvs/XEmacs/xemacs/lisp/packages/Attic/metamail.el,v 1.2 1997/02/06 02:08:35 steve Exp $
 ;; Keywords: mail, news, mime, multimedia
 
 ;; This file is part of XEmacs.
@@ -166,7 +166,7 @@
       (let ((selective-display nil)    ;Disable ^M to nl translation.
 	    (kanji-fileio-code 2)       ;Write in JIS code when nemacs.
 	    (file-coding-system         ;Write in JUNET style when mule.
-	     (if (featurep 'mule) *junet*)))
+	     (if (featurep 'mule) 'junet)))
 	(write-region beg end metafile nil 'nomessage))
       (if buffer
 	  (set-buffer buffer))
@@ -185,7 +185,13 @@
 	(if (boundp 'NEMACS)
 	    (define-program-kanji-code nil metamail-program-name 2)) ;JIS
 	(if (featurep 'mule)
-	    (define-program-coding-system nil metamail-program-name *junet*))
+	    (if (fboundp 'define-program-coding-system)
+		(define-program-coding-system
+		  nil
+		  metamail-program-name
+		  'junet)
+	      ;; XEmacs with MULE
+	      (setq file-coding-system 'junet)))
 	(apply (function call-process)
 	       metamail-program-name
 	       nil
--- a/lisp/utils/skeleton.el	Mon Aug 13 09:11:41 2007 +0200
+++ b/lisp/utils/skeleton.el	Mon Aug 13 09:12:09 2007 +0200
@@ -391,7 +391,8 @@
 
 
 (defun skeleton-internal-1 (element &optional literal)
-  (cond ((char-or-string-p element)
+  (cond ((or (integerp element)
+	     (char-or-string-p element))
 	 (if (and (integerp element)	; -num
 		  (< element 0))
 	     (if skeleton-untabify
--- a/lisp/version.el	Mon Aug 13 09:11:41 2007 +0200
+++ b/lisp/version.el	Mon Aug 13 09:12:09 2007 +0200
@@ -25,7 +25,7 @@
 (defconst emacs-version "20.0"
   "Version numbers of this version of Emacs.")
 
-(setq emacs-version (purecopy (concat emacs-version " XEmacs Lucid (test1)")))
+(setq emacs-version (purecopy (concat emacs-version " XEmacs Lucid")))
 
 (defconst emacs-major-version
   (progn (or (string-match "^[0-9]+" emacs-version)
--- a/src/ChangeLog	Mon Aug 13 09:11:41 2007 +0200
+++ b/src/ChangeLog	Mon Aug 13 09:12:09 2007 +0200
@@ -1,3 +1,17 @@
+Wed Feb  5 17:13:17 1997  David Moore  <dmoore@UCSD.EDU>
+
+	* emacs.c (main_1): Try to avoid collisions against potentially
+	incompatible system mallocs.
+
+Mon Feb  3 23:04:41 1997  Joel Peterson  <tarzan@aosi.com>
+
+	* redisplay.c: Activate face/charset redisplay caching.
+
+Mon Feb  3 22:01:09 1997  Kyle Jones  <kyle_jones@wonderworks.com>
+
+	* eval.c (do_debug_on_exit): Don't restore old value of
+	debug_on_next_call improperly.
+
 Fri Jan 31 10:28:47 1997  David Byers  <davby@ida.liu.se>
 
 	* frame.c (frame_matches_frametype): Fix next-window when the next
--- a/src/database.c	Mon Aug 13 09:11:41 2007 +0200
+++ b/src/database.c	Mon Aug 13 09:12:09 2007 +0200
@@ -71,7 +71,7 @@
   XEMACS_DB_TYPE type;
   int mode;
   int ackcess;
-  int errno;
+  int dberrno;
   void *db_handle;
   DB_FUNCS *funcs;
 };
@@ -100,7 +100,7 @@
   dbase->db_handle = NULL;
   dbase->ackcess = 0;
   dbase->mode = 0;
-  dbase->errno = 0;
+  dbase->dberrno = 0;
   dbase->type = DB_UNKNOWN;
   return (dbase);
 }
@@ -322,7 +322,7 @@
 static Lisp_Object
 dbm_lasterr (struct database_struct *dbp)
 {
-  char *temp = strerror (dbp->errno);
+  char *temp = strerror (dbp->dberrno);
   return (make_string ((unsigned char *) temp, strlen (temp)));
 }
 
@@ -405,7 +405,7 @@
 static Lisp_Object
 berkdb_lasterr (struct database_struct *dbp)
 {
-  char *temp = strerror (dbp->errno);
+  char *temp = strerror (dbp->dberrno);
   return (make_string ((unsigned char *) temp, strlen (temp)));
 }
 
@@ -424,7 +424,7 @@
   if (!status)
     return (make_string (valdatum.data, valdatum.size));
 
-  db->errno = (status == 1) ? -1 : errno;
+  db->dberrno = (status == 1) ? -1 : errno;
   return (Qnil);
 }
 
@@ -444,7 +444,7 @@
   valdatum.size = XSTRING_LENGTH (val);
   status = dbp->put (dbp, &keydatum, &valdatum, NILP (replace)
 		     ? R_NOOVERWRITE : 0);
-  db->errno = (status == 1) ? -1 : errno;
+  db->dberrno = (status == 1) ? -1 : errno;
   return status;
 }
 
@@ -462,7 +462,7 @@
   if (!status)
     return 0;
   
-  db->errno = (status == 1) ? -1 : errno;
+  db->dberrno = (status == 1) ? -1 : errno;
   return 1;
 }
 
--- a/src/emacs.c	Mon Aug 13 09:11:41 2007 +0200
+++ b/src/emacs.c	Mon Aug 13 09:12:09 2007 +0200
@@ -64,6 +64,12 @@
 
 extern void memory_warnings (void *, void (*warnfun) (CONST char *));
 
+#ifndef SYSTEM_MALLOC
+extern void *(*__malloc_hook)(size_t);
+extern void *(*__realloc_hook)(void *, size_t);
+extern void (*__free_hook)(void *);
+#endif  /* not SYSTEM_MALLOC */
+
 /* Command line args from shell, as list of strings */
 Lisp_Object Vcommand_line_args;
 
@@ -441,6 +447,14 @@
   Lisp_Object load_me;
   int inhibit_window_system;
 
+#ifndef SYSTEM_MALLOC
+  /* Make sure that any libraries we link against haven't installed a 
+     hook for a gmalloc of a potentially incompatible version. */
+  __malloc_hook = NULL;
+  __realloc_hook = NULL;
+  __free_hook = NULL;
+#endif /* not SYSTEM_MALLOC */
+
   noninteractive = 0;
 
 #ifdef NeXT
--- a/src/eval.c	Mon Aug 13 09:11:41 2007 +0200
+++ b/src/eval.c	Mon Aug 13 09:12:09 2007 +0200
@@ -403,9 +403,8 @@
 do_debug_on_exit (Lisp_Object val)
 {
   /* This is falsified by call_debugger */
-  int old_debug_on_next_call = debug_on_next_call;
   Lisp_Object v = call_debugger (list2 (Qexit, val));
-  debug_on_next_call = old_debug_on_next_call;
+
   return ((!UNBOUNDP (v)) ? v : val);
 }
 
--- a/src/glyphs.h	Mon Aug 13 09:11:41 2007 +0200
+++ b/src/glyphs.h	Mon Aug 13 09:12:09 2007 +0200
@@ -548,7 +548,7 @@
  *****************************************************************************/
 
 #define DISP_TABLE_SIZE	256
-#define DISP_CHAR_ENTRY(dp, c)	((dp)->contents[c])
+#define DISP_CHAR_ENTRY(dp, c) ((c < (dp)->size) ? (dp)->contents[c] : Qnil)
 
 struct Lisp_Vector *get_display_table (struct window *, face_index);
 
--- a/src/redisplay.c	Mon Aug 13 09:11:41 2007 +0200
+++ b/src/redisplay.c	Mon Aug 13 09:12:09 2007 +0200
@@ -108,6 +108,10 @@
 			       Used to optimize some lookups -- we
 			       only have to do some things when
 			       the charset changes. */
+  face_index last_findex;   /* The face index of the previous character.
+			       Needed to ensure the validity of the
+			       last_charset optimization. */
+  
   int last_char_width;	/* The width of the previous character. */
   int font_is_bogus;	/* If true, it means we couldn't instantiate
 			   the font for this charset, so we substitute
@@ -850,7 +854,8 @@
   else
     {
       Lisp_Object charset = CHAR_CHARSET (data->ch);
-      if (!EQ (charset, data->last_charset))
+      if (!EQ (charset, data->last_charset) ||
+	  data->findex != data->last_findex)
 	{
 	  /* OK, we need to do things the hard way. */
 	  struct window *w = XWINDOW (data->window);
@@ -876,8 +881,8 @@
 	    data->last_char_width = -1;
 	  data->new_ascent  = max (data->new_ascent,  (int) fi->ascent);
 	  data->new_descent = max (data->new_descent, (int) fi->descent);
-	  /* The following line causes display goobers and I don't know why */
-	  /*data->last_charset = charset;*/
+	  data->last_charset = charset;
+	  data->last_findex = data->findex;
 	}
 
       width = data->last_char_width;
@@ -1877,6 +1882,7 @@
   data.bi_bufpos = bi_start_pos;
   data.pixpos = dl->bounds.left_in;
   data.last_charset = Qunbound;
+  data.last_findex = DEFAULT_INDEX;
   data.result_str = Qnil;
 
   /* Set the right boundary adjusting it to take into account any end
@@ -2643,6 +2649,7 @@
   data.cursor_x = -1;
   data.findex = DEFAULT_INDEX;
   data.last_charset = Qunbound;
+  data.last_findex = DEFAULT_INDEX;
   data.result_str = Qnil;
 
   Dynarr_reset (data.db->runes);
@@ -3570,6 +3577,7 @@
   data.max_pixpos = max_pixpos;
   data.cursor_type = NO_CURSOR;
   data.last_charset = Qunbound;
+  data.last_findex = DEFAULT_INDEX;
   data.result_str = result_str;
   data.is_modeline = 1;
   XSETWINDOW (data.window, w);