Anonymous avatar Anonymous committed f955c73

Import from CVS: tag r20-5b19

Comments (0)

Files changed (26)

 							-*- indented-text -*-
+to 20.5 beta19 "Damani"
+-- Package building update
+-- Hash and profile patches from Hrvoje Niksic
+-- Miscellaneous bug fixes
+
 to 20.5 beta18 "Daera Din Panah"
 -- Miscellaneous and sundry fixes for 20.4 merged
 -- MS Windows updates from Kirill Katsnelson and Andy Piper
+1998-01-12  SL Baur  <steve@altair.xemacs.org>
+
+	* XEmacs 20.5-beta19 is released.
+
+1998-01-12  Damon Lipparelli  <lipp@primus.com>
+
+	* Makefile.in: Yow!  Fixed paths to install dirs when --prefix !=
+	--exec-prefix.
+
 1998-01-10  SL Baur  <steve@altair.xemacs.org>
 
 	* XEmacs 20.5-beta18 is released.
 
 install-only: ${MAKE_SUBDIR} check-features install-arch-dep install-arch-indep
 
-install: all check-features install-arch-dep install-arch-indep;
+install: all check-features install-arch-dep install-arch-indep
 
 install-arch-dep: mkdir
 	for subdir in ${INSTALL_ARCH_DEP_SUBDIR}; do \
 	   for subdir in `find ${archlibdir} -type d ! -name RCS ! -name SCCS ! -name CVS -print` ; \
 	     do (cd $${subdir} && $(RM) -r RCS CVS SCCS \#* *~) ; done ; \
 	else true; fi
-	${INSTALL_PROGRAM} src/xemacs ${bindir}/${progname}${version}
-	-chmod 0755 ${bindir}/${progname}${version}
-	cd ${bindir} && $(RM) ./xemacs && ${LN_S} ${progname}${version} ./xemacs
+	${INSTALL_PROGRAM} src/xemacs ${bindir}/${progname}-${version}
+	-chmod 0755 ${bindir}/${progname}-${version}
+	cd ${bindir} && $(RM) ./xemacs && ${LN_S} ${progname}-${version} ./xemacs
 	if test "${prefix}" != "${exec_prefix}"; then \
            test ! -d ${exec_prefix}/lib/xemacs && \
                 $(LN_S) ${prefix}/lib/xemacs ${exec_prefix}/lib/xemacs; \
-           test ! -d ${exec_prefix}/lib/${progname}${version}/etc && \
-                $(LN_S) ${prefix}/lib/${progname}${version}/etc \
-                        ${exec_prefix}/lib/${progname}${version}/etc; \
-           test ! -d ${exec_prefix}/lib/${progname}${version}/info && \
-                $(LN_S) ${prefix}/lib/${progname}${version}/info \
-                        ${exec_prefix}/lib/${progname}${version}/info; \
-           test ! -d ${exec_prefix}/lib/${progname}${version}/lisp && \
-                $(LN_S) ${prefix}/lib/${progname}${version}/lisp \
-                        ${exec_prefix}/lib/${progname}${version}/lisp; \
+           test ! -d ${exec_prefix}/lib/${progname}-${version}/etc && \
+                $(LN_S) ${prefix}/lib/${progname}-${version}/etc \
+                        ${exec_prefix}/lib/${progname}-${version}/etc; \
+           test ! -d ${exec_prefix}/lib/${progname}-${version}/info && \
+                $(LN_S) ${prefix}/lib/${progname}-${version}/info \
+                        ${exec_prefix}/lib/${progname}-${version}/info; \
+           test ! -d ${exec_prefix}/lib/${progname}-${version}/lisp && \
+                $(LN_S) ${prefix}/lib/${progname}-${version}/lisp \
+                        ${exec_prefix}/lib/${progname}-${version}/lisp; \
 	fi
 
 install-arch-indep: mkdir info
 #	done
 #	cd ${infodir} && $(RM) cl* xemacs* forms* info* vip*
 #	cd ${mandir} && $(RM) xemacs.1 etags.1 ctags.1 gnuserv.1
-#	cd ${bindir} && $(RM) ${progname}${version} xemacs
+#	cd ${bindir} && $(RM) ${progname}-${version} xemacs
 
 
 ## Some makes seem to remember that they've built something called FRC,
 * Lisp and internal changes in XEmacs 20.5
 ==========================================
 
-** There is initial support for 30-bit integers in elisp (normally,
+** There is initial support for 31-bit integers in elisp (normally,
 integers are only 28 bits wide on 32-bit machines.)  Compile with
 -DUSE_MINIMAL_TAGBITS to test.  With this change, the maximum buffer
-size on 32-bit machines is bumped from 128M to 512M.
+size on 32-bit machines is bumped from 128M to 1G.
 
 ** The internal image code now uses the ImageMagick library as an
 interface to various image-related functions.  You still need the
 
    #<hashtable size 2/13 data (key1 value1 key2 value2) 0x874d>
 
+** When profiling is in effect, a call-count of all recorded functions
+is now calculated.  This information is stored in
+`call-count-profile-table', and is utilized by `profile-results' as
+well as the new function `profile-call-count-results'.
+
 ** The `make-event' function now supports the TYPE and PLIST
 arguments, which can be used to create many various events from Lisp.
 See the documentation for details.
 very large buffers.  This is achieved by caching the line numbers of
 recent buffer positions, and reusing them.  This cache is used only in
 the buffers where `line-number-mode' is in effect.
+
+* Changes in XEmacs 20.4
+========================
+
+** XEmacs 20.4 is a bugfix release with no user-visible changes.
 
 
 * Changes in XEmacs 20.3
+1998-01-12  SL Baur  <steve@altair.xemacs.org>
+
+	* menubar.el (check-menu-syntax): Emergency dirty fix -- the 0 plist
+	bug strikes a menudescriptor.
+
+	* package-get-base.el (package-get-base): Updated.
+
+	* package-info.el (batch-update-package-info): Derive REQUIRES
+	from the Makefile.
+
+1998-01-13  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* files.el (save-some-buffers): Don't play games with deleting
+	other windows if we are in the minibuffer window.
+
 1998-01-08  Karl M. Hegbloom  <karlheg@bittersweet.inetarena.com>
 
 	* modeline.el (modeline-minor-mode-menu): Add support for :active
     (save-window-excursion
       ;; This can bomb during autoloads generation
       (when (and (not noninteractive)
+		 (not (eq (selected-window) (minibuffer-window)))
 		 save-some-buffers-query-display-buffer)
 	(delete-other-windows))
       ;; XEmacs - do not use queried flag
 			     menuitem)))
 		)))
 	)
-       (t (signal 'error (list "unrecognised menu descriptor" menuitem))))
+       ;; (t (signal 'error (list "unrecognised menu descriptor" menuitem))))
+       (t (message "unrecognised menu descriptor %s" (prin1-to-string menuitem))))
       (setq menu (cdr menu)))))
 
 
 (defvar place)
 (defun add-minor-mode (toggle name &optional keymap after toggle-fun)
   "Add a minor mode to `minor-mode-alist' and `minor-mode-map-alist'.
+
 TOGGLE is a symbol whose value as a variable specifies whether the
-minor mode is active.  NAME is the name that should appear in the
-modeline (it should either be a string beginning with a space or a
-symbol).  KEYMAP is a keymap to make active when the minor mode is
-active.  AFTER is the toggling symbol used for another minor mode.  If
-AFTER is non-nil, then it is used to position the new mode in the
-minor-mode alists.  TOGGLE-FUN specifies an interactive function that
-is called to toggle the mode on and off; this affects what happens
-when button2 is pressed on the mode, and when button3 is pressed
-somewhere in the list of modes.  If TOGGLE-FUN is nil and TOGGLE names
-an interactive function, TOGGLE is used as the toggle function.
+minor mode is active.
 
-Example:  (add-minor-mode 'view-minor-mode \" View\" view-mode-map)"
+ If TOGGLE has the `:menu-tag' property set to a string, that string
+ will be used as the label on the `modeline-minor-mode-menu' instead
+ of TOGGLE's symbol-name.
+
+ TOGGLE may have an `:included' property, which determines whether a
+ menu button will be shown for this minor mode in the
+ `modeline-minor-mode-menu'.  This should be either a boolean
+ variable, or an expression evaluating to t or nil.  \(See the
+ documentation of `current-menubar' for more information.)
+
+ It may have an `:active' property also, as documented in
+ `current-menubar'.
+
+NAME is the name that should appear in the modeline.  It should either
+be a string beginning with a space, or a symbol with a similar string
+as its value.
+
+KEYMAP is a keymap to make active when the minor mode is active.
+
+AFTER is the toggling symbol used for another minor mode.  If AFTER is
+non-nil, then it is used to position the new mode in the minor-mode
+alists.
+
+TOGGLE-FUN specifies an interactive function that is called to toggle
+the mode on and off; this affects what happens when button2 is pressed
+on the mode, and when button3 is pressed somewhere in the list of
+modes.  If TOGGLE-FUN is nil and TOGGLE names an interactive function,
+TOGGLE is used as the toggle function.
+
+Example: (put 'view-minor-mode :menu-tag \"View (minor)\")
+         (put 'view-minor-mode :included '(buffer-file-name))
+         (add-minor-mode 'view-minor-mode \" View\" view-mode-map)"
   (let (el place
 	(add-elt #'(lambda (elt sym)
 		     (cond ((null after) ; add to front
 		    'minor-mode-map-alist)))
     ))
 
+;; gettext anyone?
+(put 'abbrev-mode :menu-tag "Abbreviation Expansion")
 (add-minor-mode 'abbrev-mode " Abbrev")
+;; only when visiting a file...
 (add-minor-mode 'overwrite-mode 'overwrite-mode)
+(put 'auto-fill-function :menu-tag "Auto Fill")
 (add-minor-mode 'auto-fill-function " Fill" nil nil 'auto-fill-mode)
-;; not really a minor mode...
-(add-minor-mode 'defining-kbd-macro " Def")
+
+;; what's the meaning of `####' vs `FIXME' or ...?
+;; not really a minor mode...  and it doesn't work right anyway.
+;;(put 'defining-kbd-macro :menu-tag "Defining kbd macro")
+;;(add-minor-mode 'defining-kbd-macro " Def") FIXME
 
 (defun modeline-minor-mode-menu (event)
+  "The menu that pops up when you press `button3' inside the
+parentheses on the modeline."
   (interactive "e")
   (save-excursion
     (set-buffer (event-buffer event))
     (popup-menu-and-execute-in-window
-     (cons (format "Minor Mode Commands for %S:"
-		   (buffer-name (event-buffer event)))
+     (cons "Minor Mode Toggles"
 	   (apply 'nconc
 		  (mapcar
 		   #'(lambda (x)
 		       (let* ((toggle-sym (car x))
+			      (menu-tag (get toggle-sym :menu-tag nil))
 			      (toggle-fun
 			       (or (get toggle-sym
 					'modeline-toggle-function)
 					toggle-sym))))
 			 (if (not toggle-fun) nil
 			   (list (vector
-				  (concat (if (and (boundp toggle-sym)
-						   (symbol-value toggle-sym))
-					      "turn off " "turn on ")
-					  (if (symbolp toggle-fun)
-					      (symbol-name toggle-fun)
-					    (symbol-name toggle-sym)))
-
+				  (or (and (stringp menu-tag)
+					   menu-tag)
+				      (setq menu-tag (capitalize
+						      (replace-in-string
+						       (replace-in-string
+							(replace-in-string (if (symbolp toggle-fun)
+									       (symbol-name toggle-fun)
+									     (symbol-name toggle-sym))
+									   "-" " ")
+							"minor" " (minor)")
+						       " mode" ""))))
 				  toggle-fun
-				  t)))))
+				  :active (get toggle-sym :active t)
+				  :included (get toggle-sym :included t)
+				  :style 'toggle
+				  :selected (and (boundp toggle-sym)
+						 toggle-sym))))))
 		   minor-mode-alist)))
      event)))
 

lisp/package-get-base.el

 (setq package-get-base
-'((cookie
+'((footnote
+  (version "1.01"
+   filename "footnote-1.01-pkg.tar.gz"
+   md5sum "6cca2b03fe2ed76f664a398d436bf954"
+   size 17986
+   provides (footnote)
+   requires (mail-lib xemacs-base)
+   type regular
+))
+(gnats
+  (version "1.01"
+   filename "gnats-1.01-pkg.tar.gz"
+   md5sum "6bfb95bc283102cbbe0a5fc7b3f7d727"
+   size 126295
+   provides (gnats gnats-admin send-pr)
+   requires (mail-lib xemacs-base)
+   type regular
+))
+(mailcrypt
   (version "1.02"
-   filename "cookie-1.02-pkg.tar.gz"
-   md5sum "95e110ddf03202403e45950d2cb53b11"
-   size 33774
+   filename "mailcrypt-1.02-pkg.tar.gz"
+   md5sum "a4bdb22e770882d1bf465e46736d67e3"
+   size 66763
+   provides (mailcrypt)
+   requires (gnus vm mail-lib xemacs-base)
+   type regular
+))
+(mh-e
+  (version "1.03"
+   filename "mh-e-1.03-pkg.tar.gz"
+   md5sum "3a82a8fd5c3d69b375b8e6191edef061"
+   size 128925
+   provides (mh-e)
+   requires (mail-lib xemacs-base)
+   type regular
+))
+(net-utils
+  (version "1.01"
+   filename "net-utils-1.01-pkg.tar.gz"
+   md5sum "a5e186be46e80d01367ca1b2923655e6"
+   size 48550
+   provides (ilisp-browse-cltl2 emacsbug feedmail metamail rcompile shadowfile webjump webster-www)
+   requires (w3 efs mail-lib xemacs-base)
+   type regular
+))
+(ph
+  (version "1.01"
+   filename "ph-1.01-pkg.tar.gz"
+   md5sum "f7e686b77eb427a505a10348a0e9ec59"
+   size 27483
+   provides (ph)
+   requires (xemacs-base)
+   type regular
+))
+(rmail
+  (version "1.01"
+   filename "rmail-1.01-pkg.tar.gz"
+   md5sum "d8a0b4457820839c3383d59c2e0c3ed6"
+   size 83541
+   provides (rmail rmailsum)
+   requires (tm apel mail-lib xemacs-base)
+   type regular
+))
+(supercite
+  (version "1.02"
+   filename "supercite-1.02-pkg.tar.gz"
+   md5sum "19327a45b407218b67c0dfeb143c7a18"
+   size 69344
+   provides (supercite)
+   requires (mail-lib xemacs-base)
+   type regular
+))
+(tm
+  (version "1.02"
+   filename "tm-1.02-pkg.tar.gz"
+   md5sum "fa55affd4762141dc1a8090565438bbe"
+   size 180988
+   provides (tm tm-edit tm-view mime-setup)
+   requires (gnus vm mailcrypt mail-lib xemacs-base)
+   type regular
+))
+(vm
+  (version "1.03"
+   filename "vm-1.03-pkg.tar.gz"
+   md5sum "c998cbe419f3d482050632ee7115240f"
+   size 476245
+   provides (vm)
+   requires (mail-lib xemacs-base)
+   type regular
+))
+(w3
+  (version "1.01"
+   filename "w3-1.01-pkg.tar.gz"
+   md5sum "7f896771d25cef4e9e606536bdb13f2e"
+   size 582585
+   provides (w3 url)
+   requires (w3 mail-lib xemacs-base)
+   type regular
+))
+(cookie
+  (version "1.03"
+   filename "cookie-1.03-pkg.tar.gz"
+   md5sum "28b2fee1f0acbc8f19af12a415743c3f"
+   size 33784
    provides (cookie1 yow)
-   requires (xemacs-base games-misc)
+   requires (xemacs-base)
+   type regular
+))
+(games
+  (version "1.01"
+   filename "games-1.01-pkg.tar.gz"
+   md5sum "844d4f68950614f11c078649c231c017"
+   size 29160
+   provides (gamegrid snake tetris sokoban)
+   requires (xemacs-base)
    type regular
 ))
 (mine
-  (version "1.02"
-   filename "mine-1.02-pkg.tar.gz"
-   md5sum "054f2eefb015b2878ba37f6473a47dec"
-   size 67166
+  (version "1.03"
+   filename "mine-1.03-pkg.tar.gz"
+   md5sum "ca06e2e17ac4f5695e66e7004fc7b860"
+   size 67172
    provides (xmine)
    requires (xemacs-base)
    type regular
 ))
 (misc-games
-  (version "1.01"
-   filename "misc-games-1.01-pkg.tar.gz"
-   md5sum "a86cf625a2700a9b0e7f71139df011a7"
-   size 172861
-   provides (decipher gomoku hanoi life tetris)
+  (version "1.04"
+   filename "misc-games-1.04-pkg.tar.gz"
+   md5sum "07ad46ffdf17ef846c40e81d15fcd832"
+   size 163171
+   provides (decipher gomoku hanoi life)
    requires (xemacs-base)
    type single
 ))
 (Sun
-  (version "1.02"
-   filename "Sun-1.02-pkg.tar.gz"
-   md5sum "22d61bc22784e1509a3b74e38393b828"
-   size 63707
+  (version "1.03"
+   filename "Sun-1.03-pkg.tar.gz"
+   md5sum "1c121ffcac7a00a653c144d488b43860"
+   size 63758
    provides (sccs eos-browser eos-common eos-debugger eos-debugger eos-editor eos-init eos-load eos-menubar eos-toolbar sunpro)
    requires (cc-mode xemacs-base)
    type regular
 ))
 (apel
-  (version "1.01"
-   filename "apel-1.01-pkg.tar.gz"
-   md5sum "6de339aeae8a36be7e954a80bb18bc3c"
-   size 34546
+  (version "1.02"
+   filename "apel-1.02-pkg.tar.gz"
+   md5sum "57230c9a3ed91126ea97277c87b9e72b"
+   size 34606
    provides (atype emu-20 emu-e19 emu-x20 emu-xemacs emu file-detect filename install mule-caesar path-util richtext std11-parse std11 tinyrich)
    requires (xemacs-base)
    type regular
 ))
 (edebug
-  (version "1.01"
-   filename "edebug-1.01-pkg.tar.gz"
-   md5sum "7ebf5f57dc47236f71d38a387d3cdccc"
-   size 117881
+  (version "1.02"
+   filename "edebug-1.02-pkg.tar.gz"
+   md5sum "5c89f5421ecabb1f026a93b8a4a1db0b"
+   size 117931
    provides (edebug cl-read cust-print eval-reg cl-specs)
    requires (xemacs-base)
    type regular
 ))
 (efs
-  (version "1.01"
-   filename "efs-1.01-pkg.tar.gz"
-   md5sum "d2ad5d764d60345e4530dc679715ec26"
-   size 506222
-   provides (efs dired efs-auto)
+  (version "1.03"
+   filename "efs-1.03-pkg.tar.gz"
+   md5sum "7bc6786f8dee4d955d6365f0cbe2b610"
+   size 540959
+   provides (efs diff dired efs-auto)
    requires (xemacs-base)
    type regular
 ))
 (mail-lib
-  (version "1.02"
-   filename "mail-lib-1.02-pkg.tar.gz"
-   md5sum "2d02a1b69146925c13ae4e2d759b1fb2"
-   size 118488
+  (version "1.04"
+   filename "mail-lib-1.04-pkg.tar.gz"
+   md5sum "59b9cd8aefaa035cb6de8ebdfc141b0a"
+   size 118703
    provides (browse-url highlight-headers mail-abbrevs mail-extr mail-utils reporter rfc822 rmail-mini sendmail smtpmail)
    requires (xemacs-base)
    type single
 ))
 (tooltalk
-  (version "1.02"
-   filename "tooltalk-1.02-pkg.tar.gz"
-   md5sum "3fdf1c49c43dd852d2c8895e074c39ba"
-   size 9174
+  (version "1.03"
+   filename "tooltalk-1.03-pkg.tar.gz"
+   md5sum "88845fc4ace46737ef34ff8acbe0be84"
+   size 9223
    provides ()
+   requires ()
    type regular
 ))
 (xemacs-base
-  (version "1.05"
-   filename "xemacs-base-1.05-pkg.tar.gz"
-   md5sum "cbfeb7910ba552a47a23cde220156179"
-   size 394189
+  (version "1.07"
+   filename "xemacs-base-1.07-pkg.tar.gz"
+   md5sum "b1b4c6a7005a2ee33fee0c992e256ceb"
+   size 376530
    provides (add-log advice annotations assoc case-table chistory comint-xemacs comint compile edmacro ehelp electric enriched env facemenu helper imenu iso-syntax outline passwd pp regi ring shell skeleton sort thing time-stamp timezone xbm-button xpm-button)
+   requires ()
    type regular
 ))
 (xemacs-devel
-  (version "1.03"
-   filename "xemacs-devel-1.03-pkg.tar.gz"
-   md5sum "e806e74988a89ac66314a72b6f0801a8"
-   size 64241
+  (version "1.05"
+   filename "xemacs-devel-1.05-pkg.tar.gz"
+   md5sum "e12d383c1c30467d8e683504eb00604c"
+   size 71065
    provides (docref eldoc elp find-func ielm regexp-opt trace)
    requires (xemacs-base)
    type single
 ))
 (egg-its
-  (version "1.01"
-   filename "egg-its-1.01-pkg.tar.gz"
-   md5sum "ba5e6aca993a2795a1cc3bedfbc7dcc0"
-   size 316515
+  (version "1.02"
+   filename "egg-its-1.02-pkg.tar.gz"
+   md5sum "e7fa42a1121fc260f459e4dabac061ac"
+   size 257713
    provides ()
-   requires (xemacs-base mule-base)
+   requires (leim mule-base xemacs-base)
    type regular
 ))
 (leim
-  (version "1.01"
-   filename "leim-1.01-pkg.tar.gz"
-   md5sum "5c467eb0476c9da9cc6f671da1884685"
-   size 1743472
+  (version "1.02"
+   filename "leim-1.02-pkg.tar.gz"
+   md5sum "5697435f2a2d0849b4eebcc22596fdda"
+   size 1744281
    provides ()
-   requires (xemacs-base mule-base)
+   requires (mule-base xemacs-base)
    type regular
 ))
 (locale
-  (version "1.01"
-   filename "locale-1.01-pkg.tar.gz"
-   md5sum "2f390e23929941a6aa6e3478a3f10ed7"
-   size 20628
+  (version "1.02"
+   filename "locale-1.02-pkg.tar.gz"
+   md5sum "9fcdf34a9f3ef696fa143398fb92ce1f"
+   size 20633
    provides ()
-   requires (xemacs-base mule-base)
+   requires (mule-base)
    type regular
 ))
 (mule-base
-  (version "1.02"
-   filename "mule-base-1.02-pkg.tar.gz"
-   md5sum "bf8754e52b309e130242bf5036de9a3e"
-   size 499508
+  (version "1.03"
+   filename "mule-base-1.03-pkg.tar.gz"
+   md5sum "098abbbc88f1702a3a79ec9511475f38"
+   size 499505
    provides (canna-leim canna char-table china-util cyril-util isearch-ext japan-util ccl can-n-egg mule-help)
    requires (xemacs-base)
    type regular
 ))
 (skk
-  (version "1.01"
-   filename "skk-1.01-pkg.tar.gz"
-   md5sum "9aa608eccfe7da7371ea7924c3523545"
-   size 1464809
+  (version "1.02"
+   filename "skk-1.02-pkg.tar.gz"
+   md5sum "9b836a14af426899f172a3d7ec5bc13a"
+   size 1466604
    provides (skk skk-tut)
-   requires (xemacs-base mule-base)
+   requires (viper mule-base xemacs-base)
    type regular
 ))
 (calendar
-  (version "1.01"
-   filename "calendar-1.01-pkg.tar.gz"
-   md5sum "bc0908ae5798f662b9cc5cb52325c21e"
-   size 168660
+  (version "1.02"
+   filename "calendar-1.02-pkg.tar.gz"
+   md5sum "df5bb1a0d8c53dc94debc1b9f6b625d2"
+   size 168684
    provides (appt cal-dst cal-french cal-mayan cal-x cal-xemacs calendar diary-ins diary-lib holidays lunar solar)
    requires (xemacs-base)
    type regular
 ))
 (edit-utils
-  (version "1.03"
-   filename "edit-utils-1.03-pkg.tar.gz"
-   md5sum "af2cbb68fce602132f6153bb3814b59a"
-   size 498040
-   provides (abbrevlist atomic-extents avoid backup-dir balloon-help big-menubar blink-cursor blink-paren bookmark compare-w completion dabbrev desktop detached-minibuf edit-toolbar fast-lock file-part floating-toolbar flow-ctrl foldout func-menu hippie-exp icomplete id-select info-look iswitchb lazy-lock lazy-shot live-icon man mic-paren paren mode-motion+ outl-mouse page-ext blink-paren paren recent-files redo reportmail rsz-minibuf saveconfsavehist saveplace scroll-in-place toolbar-utils tree-menu uniquify where-was-i-db)
+  (version "1.06"
+   filename "edit-utils-1.06-pkg.tar.gz"
+   md5sum "6b93a01ea3389125c1ea09d035c3eced"
+   size 517449
+   provides (abbrevlist atomic-extents avoid backup-dir balloon-help big-menubar blink-cursor blink-paren bookmark compare-w completion dabbrev desktop detached-minibuf edit-toolbar fast-lock file-part floating-toolbar flow-ctrl foldout func-menu hippie-exp icomplete id-select info-look iswitchb lazy-lock lazy-shot live-icon man mic-paren paren mode-motion+ outl-mouse page-ext blink-paren paren permanent-buffers recent-files redo reportmail rsz-minibuf saveconfsavehist saveplace scroll-in-place toolbar-utils tree-menu uniquify where-was-i-db)
    requires (xemacs-base)
    type single
 ))
 (forms
-  (version "1.03"
-   filename "forms-1.03-pkg.tar.gz"
-   md5sum "8f8a2d7118102b39e06e6a8766b3efe6"
-   size 39802
+  (version "1.04"
+   filename "forms-1.04-pkg.tar.gz"
+   md5sum "9ed253efbb559b54320cd7fda934bf87"
+   size 39809
    provides (forms forms-mode)
+   requires ()
    type regular
 ))
 (hm--html-menus
-  (version "1.01"
-   filename "hm--html-menus-1.01-pkg.tar.gz"
-   md5sum "23e7e4a7e783e70c9d4d68ecf609884f"
-   size 145889
+  (version "1.02"
+   filename "hm--html-menus-1.02-pkg.tar.gz"
+   md5sum "79a9958a08c7e40f8316a9bf8637b3c5"
+   size 144731
    provides (adapt hm--date hm--html-configuration hm--html-drag-and-drop hm--html-indentation hm--html-keys hm--html-menu hm--html-mode hm--html-not-standard hm--html html-view tmpl-minor-mode)
+   requires ()
    type regular
 ))
 (ispell
-  (version "1.02"
-   filename "ispell-1.02-pkg.tar.gz"
-   md5sum "2b9140b4b8757b64ccfc59755df5a7ab"
-   size 55709
+  (version "1.03"
+   filename "ispell-1.03-pkg.tar.gz"
+   md5sum "1119bf349568fb8004b317f1a58fed57"
+   size 55723
    provides (ispell)
+   requires ()
    type regular
 ))
 (pc
-  (version "1.03"
-   filename "pc-1.03-pkg.tar.gz"
-   md5sum "97eef269303c73dbe5d19c0f2ce6ed4d"
-   size 11247
+  (version "1.04"
+   filename "pc-1.04-pkg.tar.gz"
+   md5sum "4933e0ac375397076df583a6e93ba304"
+   size 11274
    provides (delbs pc-select pending-del s-region)
    requires (xemacs-base)
    type regular
 ))
+(psgml
+  (version "1.0"
+   filename "psgml-1.0-pkg.tar.gz"
+   md5sum "9d3f8d0909bc2c291955daa6829a9882"
+   size 379154
+   provides (psgml sgml tempo)
+   requires ()
+   type regular
+))
+(sgml
+  (version "1.0"
+   filename "sgml-1.0-pkg.tar.gz"
+   md5sum "e8e744cff0466a77554dfdd477e40cfe"
+   size 26814
+   provides (sgml linuxdoc-sgml)
+   requires (xemacs-base)
+   type regular
+))
 (slider
-  (version "1.03"
-   filename "slider-1.03-pkg.tar.gz"
-   md5sum "b7d54a810b03f394cafcbc4a8e6e5b44"
-   size 11845
+  (version "1.04"
+   filename "slider-1.04-pkg.tar.gz"
+   md5sum "b0af411f9c5a2764152cd0e67b11ba8b"
+   size 11855
    provides (slider color-selector)
+   requires ()
    type regular
 ))
 (speedbar
-  (version "1.01"
-   filename "speedbar-1.01-pkg.tar.gz"
-   md5sum "3fe68d6e9ae69036d35189a3ddebcc2e"
-   size 62397
+  (version "1.02"
+   filename "speedbar-1.02-pkg.tar.gz"
+   md5sum "c32984d7c232e7049d09f85989e2087c"
+   size 62424
    provides (speedbar)
    requires (xemacs-base)
    type regular
 ))
+(strokes
+  (version "1.0"
+   filename "strokes-1.0-pkg.tar.gz"
+   md5sum "a15ce2a1dca07b18a64bf332c8946e79"
+   size 43588
+   provides (strokes)
+   requires (text-modes edit-utils mail-lib xemacs-base)
+   type regular
+))
 (text-modes
-  (version "1.01"
-   filename "text-modes-1.01-pkg.tar.gz"
-   md5sum "6a4a4536bd9397f0af0b5d224f0176d3"
-   size 84693
+  (version "1.02"
+   filename "text-modes-1.02-pkg.tar.gz"
+   md5sum "cc787c8b9945415148ddcdb2590fea10"
+   size 102015
    provides (autoinsert crontab-edit filladapt image-mode iso-acc iso-ascii iso-cvt iso-insert iso-swed swedish tabify whitespace-mode winmgr-mode xpm-mode xrdb-mode)
    requires (xemacs-base)
    type regular
 ))
 (time
-  (version "1.01"
-   filename "time-1.01-pkg.tar.gz"
-   md5sum "d20af53a3a5f2731032e38783db2b9e9"
-   size 19819
+  (version "1.02"
+   filename "time-1.02-pkg.tar.gz"
+   md5sum "78751042a5fc579eda833e75fe91b347"
+   size 19839
    provides (time)
    requires (xemacs-base)
    type regular
 ))
+(eterm
+  (version "1.02"
+   filename "eterm-1.02-pkg.tar.gz"
+   md5sum "9bc542d4e560e8a00fd555e76079164f"
+   size 101730
+   provides (eterm)
+   requires (xemacs-base)
+   type regular
+))
+(igrep
+  (version "1.0"
+   filename "igrep-1.0-pkg.tar.gz"
+   md5sum "58c6155767fd01765000d829fabbc790"
+   size 13899
+   provides (igrep)
+   requires (efs xemacs-base)
+   type regular
+))
+(ilisp
+  (version "1.02"
+   filename "ilisp-1.02-pkg.tar.gz"
+   md5sum "7fc28390ad9ff212de8da2c3add0dba0"
+   size 213183
+   provides (ilisp completer)
+   requires (xemacs-base)
+   type regular
+))
+(os-utils
+  (version "1.03"
+   filename "os-utils-1.03-pkg.tar.gz"
+   md5sum "579cd4d025e0b20bbf7887250a0ea599"
+   size 216645
+   provides (archive-mode background crypt crypt++ inf-lisp jka-compr lpr ps-print tar-mode telnet terminal uncompress)
+   requires (xemacs-base)
+   type single
+))
+(view-process
+  (version "1.02"
+   filename "view-process-1.02-pkg.tar.gz"
+   md5sum "e0ee0de2d7116477aee75b82b8d929a5"
+   size 59824
+   provides (view-process-mode)
+   requires (xemacs-base)
+   type regular
+))
 (ada
-  (version "1.01"
-   filename "ada-1.01-pkg.tar.gz"
-   md5sum "3dfd652bb8e2aae934f34f1f015f4a57"
-   size 55141
+  (version "1.02"
+   filename "ada-1.02-pkg.tar.gz"
+   md5sum "0788c1e082dd1c01a7014b2d6314c4b5"
+   size 54261
    provides (ada-mode ada-stmt)
+   requires ()
    type regular
 ))
 (c-support
-  (version "1.01"
-   filename "c-support-1.01-pkg.tar.gz"
-   md5sum "eedf97a19d02454a0ac4021a213cd566"
-   size 41788
+  (version "1.02"
+   filename "c-support-1.02-pkg.tar.gz"
+   md5sum "9d6e3bb330ca128c13dea88f321c74c3"
+   size 41817
    provides (c-comment-edit cmacexp hideif hideshow)
    requires (cc-mode xemacs-base)
    type regular
 ))
 (cc-mode
-  (version "1.02"
-   filename "cc-mode-1.02-pkg.tar.gz"
-   md5sum "a6c3aab6e2c0168d981a5dacbab429f3"
-   size 128544
+  (version "1.03"
+   filename "cc-mode-1.03-pkg.tar.gz"
+   md5sum "c943e700b28d9c0fe9a870403b913959"
+   size 126973
    provides (cc-mode)
    requires (xemacs-base)
    type regular
 ))
+(debug
+  (version "1.0"
+   filename "debug-1.0-pkg.tar.gz"
+   md5sum "b4f7e2d93c10d9b60dd94171d4fe6a7f"
+   size 87115
+   provides ()
+   requires (xemacs-base)
+   type regular
+))
 (ediff
-  (version "1.01"
+  (version 1.01
    filename "ediff-1.01-pkg.tar.gz"
    md5sum "68431adebf0b9b76b2e347b5cb531378"
    size 241640
    requires (xemacs-base efs pcl-cvs)
    type regular
 ))
+(emerge
+  (version "1.0"
+   filename "emerge-1.0-pkg.tar.gz"
+   md5sum "d5a58538014f89a0210530605eac1817"
+   size 60851
+   provides (emerge)
+   requires ()
+   type regular
+))
 (pcl-cvs
-  (version "1.01"
-   filename "pcl-cvs-1.01-pkg.tar.gz"
-   md5sum "4fd7beb2f7a61c6bb8be8ebea5bfa03b"
-   size 134459
+  (version "1.02"
+   filename "pcl-cvs-1.02-pkg.tar.gz"
+   md5sum "c0d535bee1bb2ed97f209d76a0dad15f"
+   size 134504
    provides (pcl-cvs dll elib-node generic-sc)
    requires (xemacs-base)
    type regular
 ))
 (prog-modes
+  (version "1.02"
+   filename "prog-modes-1.02-pkg.tar.gz"
+   md5sum "6f49bfdc7c88ac2182d55c1d4f6c0015"
+   size 535033
+   provides (autoconf-mode cperl-mode eiffel3 f90 fortran ksh-mode m4-mode makefile perl-mode postscript python-mode rexx-mode simula-mode tcl teco verilog-mod)
+   requires (mail-lib xemacs-base)
+   type regular
+))
+(scheme
   (version "1.01"
-   filename "prog-modes-1.01-pkg.tar.gz"
-   md5sum "b0af0691a51202322a7d7d800a2d5543"
-   size 519423
-   provides (autoconf-mode cperl-mode eiffel3 f90 fortran ksh-mode m4-mode makefile perl-mode postscript python-mode rexx-mode simula-mode tcl teco verilog-mod)
-   requires (xemacs-base mail-lib )
+   filename "scheme-1.01-pkg.tar.gz"
+   md5sum "404316bd16588b6a8e743e261a14afb1"
+   size 34759
+   provides (scheme xscheme cmuscheme)
+   requires (xemacs-base)
    type regular
 ))
 (sh-script
-  (version "1.02"
-   filename "sh-script-1.02-pkg.tar.gz"
-   md5sum "14493ca0455148f4d62b583d3c1562a9"
-   size 33556
+  (version "1.03"
+   filename "sh-script-1.03-pkg.tar.gz"
+   md5sum "1f804e9aa1defc8d5f9d35ffb8f26a34"
+   size 33568
    provides (sh-script executable)
    requires (xemacs-base)
    type regular
 ))
-(vc
-  (version "1.01"
-   filename "vc-cc-1.01-pkg.tar.gz"
-   md5sum "2e549b7fbebc82e7166a6c225344e46c"
-   size 95934
+(vc-cc
+  (version "1.02"
+   filename "vc-cc-1.02-pkg.tar.gz"
+   md5sum "d0c0c5a9cdae43971d845858de4aa6bc"
+   size 95974
    provides (vc)
-   requires (xemacs-base efs)
+   requires (efs xemacs-base)
    type regular
 ))
 (vc
-  (version "1.01"
-   filename "vc-1.01-pkg.tar.gz"
-   md5sum "3b40953a1a171aed5f3f4e58963be229"
-   size 74214
+  (version "1.02"
+   filename "vc-1.02-pkg.tar.gz"
+   md5sum "c2e1a4c4de6b1e9a43dd6b74028fedf5"
+   size 74142
    provides (vc)
-   requires (xemacs-base efs)
+   requires (efs xemacs-base)
    type regular
 ))
 (vhdl
-  (version "1.01"
-   filename "vhdl-1.01-pkg.tar.gz"
-   md5sum "cefebce133fae1544bcd4a487493bde4"
-   size 54036
+  (version "1.02"
+   filename "vhdl-1.02-pkg.tar.gz"
+   md5sum "3c28c8ab7866519131ee0fe8e5b08f6e"
+   size 54025
    provides (vhdl-mode)
+   requires ()
    type regular
 ))
 (auctex
-  (version "1.01"
-   filename "auctex-1.01-pkg.tar.gz"
-   md5sum "f720a7e3cedae6276079adc2329b335b"
-   size 289282
+  (version "1.02"
+   filename "auctex-1.02-pkg.tar.gz"
+   md5sum "31f3845c0cd3178cbd07478da9a0e70e"
+   size 289385
    provides (auc-old bib-cite font-latex latex multi-prompt tex-buf tex-info tex-jp tex-site tex)
    requires (xemacs-base)
    type regular
 ))
 (crisp
-  (version "1.01"
-   filename "crisp-1.01-pkg.tar.gz"
-   md5sum "a984e6bc7446c14fc33d94d5ced95f57"
-   size 9029
+  (version "1.02"
+   filename "crisp-1.02-pkg.tar.gz"
+   md5sum "d1f9279563f71f947d758e5722619aef"
+   size 9038
    provides (crisp scroll-lock)
+   requires ()
    type regular
 ))
 (edt
-  (version "1.01"
-   filename "edt-1.01-pkg.tar.gz"
-   md5sum "7a9f9182ef96250906ec531ee8b81f46"
-   size 45966
+  (version "1.02"
+   filename "edt-1.02-pkg.tar.gz"
+   md5sum "eee41be05231820696aa27fcca84a38c"
+   size 45981
    provides (edt)
    requires (xemacs-base)
    type regular
 ))
 (texinfo
-  (version "1.03"
-   filename "texinfo-1.03-pkg.tar.gz"
-   md5sum "391537d64b8e03a4233d124c0a92a6c9"
-   size 113799
+  (version "1.04"
+   filename "texinfo-1.04-pkg.tar.gz"
+   md5sum "6da524a224540b84c7be79cffcc8f966"
+   size 113831
    provides (makeinfo tex-mode texinfmt texinfo texnfo-tex texnfo-upd)
    requires (xemacs-base)
    type regular
 ))
+(textools
+  (version "1.0"
+   filename "textools-1.0-pkg.tar.gz"
+   md5sum "c75f9e6b009a6f9892cd0aa68f8df17b"
+   size 187454
+   provides (bib-mode bibtex refer-to-bibtex reftex)
+   requires (xemacs-base)
+   type single
+))
 (tpu
-  (version "1.01"
-   filename "tpu-1.01-pkg.tar.gz"
-   md5sum "c76aa33c56bb7555c5976b42fdf7b391"
-   size 64845
+  (version "1.03"
+   filename "tpu-1.03-pkg.tar.gz"
+   md5sum "c9801b4a173570fce0598182408ce90c"
+   size 57373
    provides (tpu)
+   requires ()
    type regular
 ))
 (viper
-  (version "1.01"
-   filename "viper-1.01-pkg.tar.gz"
-   md5sum "c8b1c0c664baeefe4bfccac077d83ad3"
-   size 252762
+  (version "1.02"
+   filename "viper-1.02-pkg.tar.gz"
+   md5sum "99145b4a71030c0fc8c93e24ddc29dd3"
+   size 260582
    provides (viper)
+   requires (xemacs-base)
    type regular
 ))
 ))

lisp/package-info.el

   (unless noninteractive
     (error "`batch-update-package-info' is to be used only with -batch"))
   (let ((version (nth 0 command-line-args-left))
-	(filename (nth 1 command-line-args-left)))
+	(filename (nth 1 command-line-args-left))
+	(requires (nth 2 command-line-args-left)))
+    (unless requires
+      (setq requires ""))
     (find-file package-info)
     (erase-buffer)
     (insert-file-contents-literally package-info-template)
 				      (file-name-nondirectory filename)))
     (pi-update-key "SIZE" (format "%d"
 				  (nth 7 (file-attributes filename))))
+    (pi-update-key "REQUIRES" requires)
     (save-buffers-kill-emacs 0)))
 
 (provide 'package-info)
-Sat Jan 10 11:36:11 1998    <andyp@parallax.co.uk>
+1998-01-12  SL Baur  <steve@altair.xemacs.org>
+
+	* profile.c (Fclear_profiling_info): Fix typing error.
+
+	* elhash.c (elisp_map_remhash): Fix typing error.
+	(elisp_maphash): Ditto.
+
+1998-01-12  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* mule-ccl.c (Fccl_execute_on_string): Use Dynar_free to free a
+ 	Dynarr.
+
+1998-01-13  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* profile.c (vars_of_profile): New variable
+ 	`call-count-profile-table'.
+	(Fclear_profiling_info): Clear call-count-profile-table.
+
+	* eval.c (funcall_recording_as): Use it.
+
+	* profile.c (profile_increase_call_count): New function.
+
+	* lstream.c (stdio_flusher): Comment addition.
+
+	* objects-msw.c (mswindows_string_to_color): Support #RRRGGGBBB,
+	as well as #RRGGBB.
+	(mswindows_X_color_map): Reformatted.
+
+1998-01-12  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* line-number.c (invalidate_line_number_cache): Comment fixup.
+
+	* symbols.c (Fapropos_internal): Docstring fix.
+
+	* fns.c (Fstring_equal): Docstring fix.
+
+1998-01-12  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* profile.c (get_profiling_info_maphash): Return int.
+	(mark_profiling_info_maphash): Ditto.
+
+	* elhash.c (Finternal_hash_value): New debugging function,
+	undefined by default.
+
+1998-01-11  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* mule-coding.c (add_coding_system_to_list_mapper): Ditto.
+
+	* mule-charset.c (add_charset_to_list_mapper): Return int.
+
+	* faces.c (add_face_to_list_mapper): Return int.
+	(mark_face_as_clean_mapper): Ditto.
+	(update_face_inheritance_mapper): Ditto.
+
+	* keymap.c (keymap_submaps_mapper_0): Return int.
+	(keymap_submaps_mapper): Ditto.
+	(copy_keymap_inverse_mapper): Ditto.
+	(copy_keymap_mapper): Ditto.
+	(map_keymap_unsorted_mapper): Ditto.
+	(map_keymap_sorted_mapper): Ditto.
+
+	* elhash.c (hashtable): Added a hash method.
+	(hashtable_hash): New function.
+
+1998-01-09  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* elhash.c (lisp_maphash_function): Return 0.
+	(hashtable_equal_mapper): Bail out when an element is not `equal'.
+
+	* hash.c (maphash): Bail out if map function returns non-zero.
+
+1998-01-11  SL Baur  <steve@altair.xemacs.org>
+
+	* eval.c (Fbacktrace): Treat first parameter to byte-code
+	specially.
+
+Sat Jan 10 11:36:11 1998  Andy Piper  <andyp@parallax.co.uk>
 
 	* config.h.in: undef HAVE_SYS_UN_H so that it gets defined by
 	configure for gnuserv with UNIX_DOMAIN_SOCKETS.
 static Lisp_Object mark_hashtable (Lisp_Object, void (*) (Lisp_Object));
 static void print_hashtable (Lisp_Object, Lisp_Object, int);
 static int hashtable_equal (Lisp_Object t1, Lisp_Object t2, int depth);
+static unsigned long hashtable_hash (Lisp_Object obj, int depth);
 DEFINE_LRECORD_IMPLEMENTATION ("hashtable", hashtable,
                                mark_hashtable, print_hashtable, 0,
-			       hashtable_equal, 0, struct hashtable);
+			       hashtable_equal, hashtable_hash,
+			       struct hashtable);
 
 static Lisp_Object
 mark_hashtable (Lisp_Object obj, void (*markobj) (Lisp_Object))
    elements, and for each key in hashtable, the values are `equal'.
 
    This is similar to Common Lisp `equalp' of hashtables, with the
-   difference that CL requires the keys to be compared using the
-   `:test' function, which we don't do.  Doing that would require
-   consing, and consing is bad idea in `equal'.  Anyway, our method
-   should provide the same result -- if the keys are not equal
-   according to `:test', then Fgethash() in hashtable_equal_mapper()
-   will fail.  */
+   difference that CL requires the keys to be compared with the test
+   function, which we don't do.  Doing that would require consing, and
+   consing is bad idea in `equal'.  Anyway, our method should provide
+   the same result -- if the keys are not equal according to test
+   function, then Fgethash() in hashtable_equal_mapper() will fail.  */
 struct hashtable_equal_closure
 {
   int depth;
-  int equal_so_far;
+  int equal;
   Lisp_Object other_table;
 };
 
-static void
+static int
 hashtable_equal_mapper (void *key, void *contents, void *arg)
 {
   struct hashtable_equal_closure *closure =
     (struct hashtable_equal_closure *)arg;
   Lisp_Object keytem, valuetem;
+  Lisp_Object value_in_other;
 
-  /* It would be beautiful if maphash() allowed us to bail out when C
-     function returns non-zero, a la map_extents() et al.  #### Make
-     it so!  */
-  if (closure->equal_so_far)
+  CVOID_TO_LISP (keytem, key);
+  CVOID_TO_LISP (valuetem, contents);
+  /* Look up the key in the other hashtable, and compare the values.  */
+  value_in_other = Fgethash (keytem, closure->other_table, Qunbound);
+  if (UNBOUNDP (value_in_other)
+      || !internal_equal (valuetem, value_in_other, closure->depth))
     {
-      Lisp_Object value_in_other;
-      CVOID_TO_LISP (keytem, key);
-      CVOID_TO_LISP (valuetem, contents);
-      /* Look up the key in the other hashtable, and compare the
-         values.  */
-      value_in_other = Fgethash (keytem, closure->other_table, Qunbound);
-      if (UNBOUNDP (value_in_other)
-	  || !internal_equal (valuetem, value_in_other, closure->depth))
-	closure->equal_so_far = 0;
-      /* return 1; */
+      /* Give up. */
+      closure->equal = 0;
+      return 1;
     }
-  /* return 0; */
+  return 0;
 }
 
 static int
     return 0;
 
   closure.depth = depth + 1;
-  closure.equal_so_far = 1;
+  closure.equal = 1;
   closure.other_table = t2;
   elisp_maphash (hashtable_equal_mapper, t1, &closure);
-  return closure.equal_so_far;
+  return closure.equal;
+}
+
+/* Hashtable hash function.  This hashes 5 key-value pairs.  For EQ
+   hashtables, keys are used as the hash value themselves, whereas
+   values are hashed with internal_hash().  For EQUAL hashtables, both
+   keys and values are hashed properly.  EQL tables are handled as
+   necessary.  All of this should make the hash function compatible
+   with hashtable_equal().  The elements hashed are the first five
+   mapped over by maphash().  */
+
+struct hashtable_hash_closure
+{
+  struct hashtable *table;
+  int depth;
+  unsigned long hash;
+  int count;
+};
+
+/* Needed for tests.  */
+static int lisp_object_eql_equal (CONST void *x1, CONST void *x2);
+static int lisp_object_equal_equal (CONST void *x1, CONST void *x2);
+
+static int
+hashtable_hash_mapper (void *key, void *contents, void *arg)
+{
+  struct hashtable_hash_closure *closure =
+    (struct hashtable_hash_closure *)arg;
+  Lisp_Object valuetem, keytem;
+  unsigned long keyhash;
+
+  CVOID_TO_LISP (keytem, key);
+  CVOID_TO_LISP (valuetem, contents);
+
+  if (!closure->table->test_function)
+    /* For eq, use key itself as hash.  */
+    keyhash = LISP_HASH (keytem);
+  else if (closure->table->test_function == lisp_object_eql_equal)
+    /* The same as eq, unless the key is float.  */
+    keyhash = (FLOATP (keytem)
+	       ? internal_hash (keytem, closure->depth) : LISP_HASH (keytem));
+  else
+    /* equal: hash the key properly. */
+    keyhash = internal_hash (keytem, closure->depth);
+
+  closure->hash = HASH3 (closure->hash, keyhash,
+			 internal_hash (valuetem, closure->depth));
+  return (++closure->count > 5) ? 1 : 0;
+}
+
+static unsigned long
+hashtable_hash (Lisp_Object obj, int depth)
+{
+  struct hashtable_hash_closure closure;
+
+  closure.table = XHASHTABLE (obj);
+  closure.depth = depth + 1;
+  closure.hash = 0;
+  closure.count = 0;
+
+  elisp_maphash (hashtable_hash_mapper, obj, &closure);
+  return closure.hash;
 }
 
 /* Printing hashtables.
    #<hashtable size 2/13 data (key1 value1 key2 value2) 0x874d>
 
    The data is truncated to four pairs, and the rest is shown with
-   `...'.  The actual printer is non-consing.  */
+   `...'.  This printer does not cons.  */
 
 struct print_hashtable_data_closure
 {
   Lisp_Object printcharfun;
 };
 
-static void
+static int
 print_hashtable_data_mapper (void *key, void *contents, void *arg)
 {
   Lisp_Object keytem, valuetem;
       print_internal (valuetem, closure->printcharfun, 1);
     }
   ++closure->count;
+  return 0;
 }
 
 /* Print the data of the hashtable.  This maps through a Lisp
 		  printcharfun);
 }
 
-/* Needed for tests.  */
-static int lisp_object_eql_equal (CONST void *x1, CONST void *x2);
-static int lisp_object_equal_equal (CONST void *x1, CONST void *x2);
-
 static void
 print_hashtable (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 {
 		"you-d-better-not-see-this"));
       write_c_string (buf, printcharfun);
     }
-  /* These checks are way kludgy... */
-  if (table->test_function == NULL)
+  /* These checks have a kludgy look to them, but they are safe.  Due
+     to nature of hashing, you cannot use arbitrary test functions
+     anyway.  */
+  if (!table->test_function)
     write_c_string (" test eq", printcharfun);
   else if (table->test_function == lisp_object_equal_equal)
     write_c_string (" test equal", printcharfun);
 int
 lisp_string_equal (CONST void *x1, CONST void *x2)
 {
+  /* This is wrong anyway.  You can't use strcmp() on Lisp strings,
+     because they can contain zero characters.  */
   Lisp_Object str1, str2;
   CVOID_TO_LISP (str1, x1);
   CVOID_TO_LISP (str2, x2);
   signal_error (Qinvalid_function, list1 (function));
 }
 
-static void
+static int
 lisp_maphash_function (CONST void *void_key,
 		       void *void_val,
 		       void *void_fn)
   VOID_TO_LISP (val, void_val);
   VOID_TO_LISP (fn, void_fn);
   call2 (fn, key, val);
+  return 0;
 }
 
 
    lisp hashtable.
  */
 void
-elisp_maphash (maphash_function function, Lisp_Object hashtable, void *closure)
+elisp_maphash (void (*function) (CONST void *key, void *contents,
+				 void *extra_arg),
+	       Lisp_Object hashtable, void *closure)
 {
   struct _C_hashtable htbl;
 
 }
 
 void
-elisp_map_remhash (remhash_predicate function, Lisp_Object hashtable,
+elisp_map_remhash (int (*function) (CONST void *key,
+				    CONST void *contents,
+				    void *extra_arg),
+		   Lisp_Object hashtable,
 		   void *closure)
 {
   struct _C_hashtable htbl;
   int did_mark;
 };
 
-static void
+static int
 marking_mapper (CONST void *key, void *contents, void *closure)
 {
   Lisp_Object keytem, valuetem;
       abort (); /* Huh? */
     }
 
-  return;
+  return 0;
 }
 
 int
   return LISP_HASH (obj);
 }
 
+#if 0
+xxDEFUN ("internal-hash-value", Finternal_hash_value, 1, 1, 0, /*
+Hash value of OBJECT.  For debugging.
+The value is returned as (HIGH . LOW).
+*/
+       (object))
+{
+  /* This function is pretty 32bit-centric. */
+  unsigned long hash = internal_hash (object, 0);
+  return Fcons (hash >> 16, hash & 0xffff);
+}
+#endif
+
 
 /************************************************************************/
 /*                            initialization                            */
   DEFSUBR (Fmake_weak_hashtable);
   DEFSUBR (Fmake_key_weak_hashtable);
   DEFSUBR (Fmake_value_weak_hashtable);
+#if 0
+  DEFSUBR (Finternal_hash_value);
+#endif
   defsymbol (&Qhashtablep, "hashtablep");
   defsymbol (&Qhashtable, "hashtable");
   defsymbol (&Qweak, "weak");
 #define POP_BACKTRACE(bt) \
   do { backtrace_list = (bt).next; } while (0)
 
+extern int profiling_active;
+void profile_increase_call_count (Lisp_Object);
+
 /* This is the list of current catches (and also condition-cases).
    This is a stack: the most recent catch is at the head of the
    list.  Catches are created by declaring a 'struct catchtag'
   }
 #endif
 
+  /* It might be useful to place this *after* all the checks.  */
+  if (profiling_active)
+    profile_increase_call_count (fun);
+
   if (SYMBOLP (fun))
     fun = indirect_function (fun, 1);
 
 		  int i;
 		  for (i = 0; i < backlist->nargs; i++)
 		    {
+		      if (!i && EQ(tem, Qbyte_code)) {
+			write_c_string("\"...\"", stream);
+			continue;
+		      }
 		      if (i != 0) write_c_string (" ", stream);
 		      Fprin1 (backlist->args[i], stream);
 		    }
   Lisp_Object *face_list;
 };
 
-static void
+static int
 add_face_to_list_mapper (CONST void *hash_key, void *hash_contents,
 			 void *face_list_closure)
 {
   face_list = fcl->face_list;
 
   *face_list = Fcons (XFACE (contents)->name, *face_list);
+  return 0;
 }
 
 static Lisp_Object
 }
 
 
-static void
+static int
 mark_face_as_clean_mapper (CONST void *hash_key, void *hash_contents,
 			   void *flag_closure)
 {
   CVOID_TO_LISP (key, hash_key);
   VOID_TO_LISP (contents, hash_contents);
   XFACE (contents)->dirty = *flag;
+  return 0;
 }
 
 static void
   UNGCPRO;
 }
 
-static void
+static int
 update_face_inheritance_mapper (CONST void *hash_key, void *hash_contents,
 				void *face_inheritance_closure)
 {
       update_inheritance_mapper_internal (contents, fcl->face, Qblinking);
       update_inheritance_mapper_internal (contents, fcl->face, Qreverse);
     }
+  return 0;
 }
 
 static void
 DEFUN ("string-equal", Fstring_equal, 2, 2, 0, /*
 T if two strings have identical contents.
 Case is significant.  Text properties are ignored.
-(Under XEmacs, `equal' also ignores text properties and extents in
-strings, but this is not the case under FSF Emacs.)
+\(Under XEmacs, `equal' also ignores text properties and extents in
+strings, but this is not the case under FSF Emacs 19.  In FSF Emacs 20
+`equal' is the same as in XEmacs, in that respect.)
 Symbols are also allowed; their print names are used instead.
 */
-  (s1, s2))
+       (s1, s2))
 {
   int len;
 
   hentry *limit;
 
   if (hash->zero_set)
-    ((*mf) (0, hash->zero_entry, arg));
+    {
+      if (((*mf) (0, hash->zero_entry, arg)))
+	return;
+    }
 
   for (e = hash->harray, limit = e + hash->size; e < limit; e++)
     {
       if (e->key)
-	((*mf) (e->key, e->contents, arg));
+	{
+	  if (((*mf) (e->key, e->contents, arg)))
+	    return;
+	}
     }
 }
 
 /* delete the entry which key is key */
 void remhash (CONST void *key, c_hashtable hash);
 
-typedef void (*maphash_function) (CONST void* key, void* contents, void* arg);
+typedef int (*maphash_function) (CONST void* key, void* contents, void* arg);
 
 typedef int (*remhash_predicate) (CONST void* key, CONST void* contents,
                                   void* arg);
   Lisp_Object *result_locative;
 };
 
-static void
+static int
 keymap_submaps_mapper_0 (CONST void *hash_key, void *hash_contents,
                          void *keymap_submaps_closure)
 {
   VOID_TO_LISP (contents, hash_contents);
   /* Perform any autoloads, etc */
   Fkeymapp (contents);
+  return 0;
 }
 
-static void
+static int
 keymap_submaps_mapper (CONST void *hash_key, void *hash_contents,
                        void *keymap_submaps_closure)
 {
 
   if (!NILP (Fkeymapp (contents)))
     *result_locative = Fcons (Fcons (key, contents), *result_locative);
+  return 0;
 }
 
 static int map_keymap_sort_predicate (Lisp_Object obj1, Lisp_Object obj2,
   Lisp_Object inverse_table;
 };
 
-static void
+static int
 copy_keymap_inverse_mapper (CONST void *hash_key, void *hash_contents,
                             void *copy_keymap_inverse_closure)
 {
   if (CONSP (inverse_contents))
     inverse_contents = Fcopy_sequence (inverse_contents);
   Fputhash (key, inverse_contents, closure->inverse_table);
+
+  return 0;
 }
 
 
   struct keymap *self;
 };
 
-static void
+static int
 copy_keymap_mapper (CONST void *hash_key, void *hash_contents,
                     void *copy_keymap_closure)
 {
   if (KEYMAPP (contents))
     keymap_store_internal (key, closure->self,
 			   copy_keymap (contents));
+  return 0;
 }
 
 static Lisp_Object
 };
 
 /* used by map_keymap() */
-static void
+static int
 map_keymap_unsorted_mapper (CONST void *hash_key, void *hash_contents,
                             void *map_keymap_unsorted_closure)
 {
       key.modifiers = modifiers;
       ((*closure->fn) (&key, contents, closure->arg));
     }
+  return 0;
 }
 
 
 };
 
 /* used by map_keymap_sorted() */
-static void
+static int
 map_keymap_sorted_mapper (CONST void *hash_key, void *hash_contents,
                           void *map_keymap_sorted_closure)
 {
   CVOID_TO_LISP (key, hash_key);
   VOID_TO_LISP (contents, hash_contents);
   *list = Fcons (Fcons (key, contents), *list);
+  return 0;
 }
 
 

src/line-number.c

       if (!CONSP (ring[i]))
 	break;
       /* As the marker stays behind the insertions, this check might
-         as well be >=.  However, Finsert_before_markers can move the
-         marker anyway, which bites in shell buffers.  */
+         as well be `>'.  However, Finsert_before_markers can move the
+         marker anyway, which bites in shell buffers.
+
+	 #### This is wrong; it works right, but forces recreation of
+	 the cached marker (and recalculation of newlines) every time
+	 a newline is inserted at point, which is way losing.  Isn't
+	 there a way to make a marker impervious to
+	 Finsert_before_markers()??  Maybe I should convert to using
+	 extents.  */
       if (marker_position (XCAR (ring[i])) >= pos)
 	{
 	  /* Get the marker out of the way.  */
   if (stream->flags & LSTREAM_FL_WRITE)
     return fflush (str->file);
   else
-    /* call fpurge?  Only exists on some systems. */
+    /* call fpurge?  Only exists on some systems.  #### Why not add a
+       configure check for HAVE_FPURGE and utilize it on systems that
+       support it?  --hniksic */
     return 0;
 }
 
   CHECK_VECTOR (ccl_prog);
   CHECK_VECTOR (reg);
   if (XVECTOR_LENGTH (reg) != 8)
-    error ("Invalid length of vector REGISTERS");
+    signal_simple_error ("Vector should be of length 8", reg);
 
   setup_ccl_program (&ccl, ccl_prog);
   for (i = 0; i < 8; i++)
   CHECK_VECTOR (ccl_prog);
   CHECK_VECTOR (status);
   if (XVECTOR_LENGTH (status) != 9)
-    error ("Invalid length of vector STATUS");
+    signal_simple_error ("Vector should be of length 9", status);
   CHECK_STRING (str);
   GCPRO3 (ccl_prog, status, str);
 
   UNGCPRO;
 
   val = make_string (Dynarr_atp (outbuf, 0), produced);
-  free (outbuf);
+  Dynarr_free (outbuf);
   QUIT;
   if (ccl.status != CCL_STAT_SUCCESS
       && ccl.status != CCL_STAT_SUSPEND)

src/mule-charset.c

   Lisp_Object *charset_list;
 };
 
-static void
+static int
 add_charset_to_list_mapper (CONST void *hash_key, void *hash_contents,
 			    void *charset_list_closure)
 {
   charset_list = chcl->charset_list;
 
   *charset_list = Fcons (XCHARSET_NAME (contents), *charset_list);
+  return 0;
 }
 
 DEFUN ("charset-list", Fcharset_list, 0, 0, 0, /*

src/mule-coding.c

   Lisp_Object *coding_system_list;
 };
 
-static void
+static int
 add_coding_system_to_list_mapper (CONST void *hash_key, void *hash_contents,
 				  void *coding_system_list_closure)
 {
 
   *coding_system_list = Fcons (XCODING_SYSTEM (contents)->name,
 			       *coding_system_list);
+  return 0;
 }
 
 DEFUN ("coding-system-list", Fcoding_system_list, 0, 0, 0, /*
 /* Why the hell is XEmacs so fucking slow?
    Copyright (C) 1996 Ben Wing.
+   Copyright (C) 1998 Free Software Foundation, Inc.
 
 This file is part of XEmacs.
 
 #include "syssignal.h"
 #include "systime.h"
 
-/*
+/* We implement our own profiling scheme so that we can determine
+   things like which Lisp functions are occupying the most time.  Any
+   standard OS-provided profiling works on C functions, which is
+   somewhat useless.
 
-We implement our own profiling scheme so that we can determine things
-like which Lisp functions are occupying the most time.  Any standard
-OS-provided profiling works on C functions, which is somewhat useless.
+   The basic idea is simple.  We set a profiling timer using setitimer
+   (ITIMER_PROF), which generates a SIGPROF every so often.  (This
+   runs not in real time but rather when the process is executing or
+   the system is running on behalf of the process.) When the signal
+   goes off, we see what we're in, and add by 1 the count associated
+   with that function.
 
-The basic idea is simple.  We set a profiling timer using
-setitimer (ITIMER_PROF), which generates a SIGPROF every so often.
-\(This runs not in real time but rather when the process is executing
-or the system is running on behalf of the process.) When the signal
-goes off, we see what we're in, and add by 1 the count associated with
-that function.
+   It would be nice to use the Lisp allocation mechanism etc. to keep
+   track of the profiling information, but we can't because that's not
+   safe, and trying to make it safe would be much more work than is
+   worth.
 
-It would be nice to use the Lisp allocation mechanism etc. to keep
-track of the profiling information, but we can't because that's not
-safe, and trying to make it safe would be much more work than is
-worth.
 
-*/
+   Jan 1998: In addition to this, I have added code to remember call
+   counts of Lisp funcalls.  The profile_increase_call_count()
+   function is called from funcall_recording_as(), and serves to add
+   data to Vcall_count_profile_table.  This mechanism is much simpler
+   and independent of the SIGPROF-driven one.  It uses the Lisp
+   allocation mechanism normally, since it is not called from a
+   handler.  It may even be useful to provide a way to turn on only
+   one profiling mechanism, but I haven't done so yet.  --hniksic */
 
 c_hashtable big_profile_table;
+Lisp_Object Vcall_count_profile_table;
 
 int default_profiling_interval;
 
    enough to catch us while we're already in there. */
 static volatile int inside_profiling;
 
+/* Increase the value of OBJ in Vcall_count_profile_table hashtable.
+   If hashtable is nil, create it first.  */
+void
+profile_increase_call_count (Lisp_Object obj)
+{
+  Lisp_Object count;
+
+  if (NILP (Vcall_count_profile_table))
+    Vcall_count_profile_table = Fmake_hashtable (make_int (100), Qeq);
+
+  count = Fgethash (obj, Vcall_count_profile_table, Qzero);
+  if (!INTP (count))
+    count = Qzero;
+  Fputhash (obj, make_int (1 + XINT (count)), Vcall_count_profile_table);
+}
+
 static SIGTYPE
 sigprof_handler (int signo)
 {
   Lisp_Object accum;
 };
 
-static void
+static int
 get_profiling_info_maphash (CONST void *void_key,
 			    void *void_val,
 			    void *void_closure)
   val = (EMACS_INT) void_val;
 
   closure->accum = Fcons (Fcons (key, make_int (val)), closure->accum);
+  return 0;
 }
 
 DEFUN ("get-profiling-info", Fget_profiling_info, 0, 0, 0, /*
   void (*markfun) (Lisp_Object);
 };
 
-static void
+static int
 mark_profiling_info_maphash (CONST void *void_key,
 			     void *void_val,
 			     void *void_closure)
 
   CVOID_TO_LISP (key, void_key);
   (((struct mark_profiling_info_closure *) void_closure)->markfun) (key);
+  return 0;
 }
 
 void
       clrhash (big_profile_table);
       inside_profiling = 0;
     }
+  if (!NILP(Vcall_count_profile_table))
+    Fclrhash (Vcall_count_profile_table);
   return Qnil;
 }
 
 */ );
   default_profiling_interval = 1000;
 
+  DEFVAR_LISP ("call-count-profile-table", &Vcall_count_profile_table /*
+The table where call-count information is stored by the profiling primitives.
+This is a hashtable whose keys are funcallable objects, and whose
+ values are their call counts (integers).
+*/ );
+  Vcall_count_profile_table = Qnil;
+
   inside_profiling = 0;
 
   QSin_redisplay = build_string ("(in redisplay)");
 
 DEFUN ("apropos-internal", Fapropos_internal, 1, 2, 0, /*
 Show all symbols whose names contain match for REGEXP.
-If optional 2nd arg PREDICATE is non-nil, (funcall PRED SYM) is done
-for each symbol and a symbol is mentioned only if that returns non-nil.
+If optional 2nd arg PREDICATE is non-nil, (funcall PREDICATE SYMBOL)
+ is done for each symbol and a symbol is mentioned only if that
+ returns non-nil.
 Return list of symbols found.
 */
        (regexp, predicate))
 #!/bin/sh
 emacs_major_version=20
 emacs_minor_version=5
-emacs_beta_version=18
-xemacs_codename="Daera Din Panah"
+emacs_beta_version=19
+xemacs_codename="Damani"
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.