Commits

steve  committed bbd09b7

Created

  • Participants
  • Tags xemacs

Comments (0)

Files changed (138)

+1998-01-12  SL Baur  <steve@altair.xemacs.org>
+
+	* Makefile: Update to newer package interface.
+
+1997-12-30  SL Baur  <steve@altair.xemacs.org>
+
+	* Makefile: Fix Makefile and repackage.
+
+1997-12-21  SL Baur  <steve@altair.xemacs.org>
+
+	* vm-loaddefs.el: New file.  Created from autoloads formerly in
+	loaddefs.el.
+
+	* Makefile: Created.
+
+# Makefile for VM lisp code
+
+# This file is part of XEmacs.
+
+# XEmacs is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any
+# later version.
+
+# XEmacs is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with XEmacs; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+VERSION = 1.03
+PACKAGE = vm
+PKG_TYPE = regular
+REQUIRES = mail-lib xemacs-base
+CATEGORY = comm
+
+ELCS = vm-message.elc vm-misc.elc tapestry.elc \
+	vm-delete.elc vm-digest.elc \
+	vm-easymenu.elc vm-edit.elc vm-folder.elc vm-license.elc \
+	vm-loaddefs.elc vm-mark.elc vm-menu.elc vm-mime.elc vm-minibuf.elc \
+	vm-motion.elc vm-mouse.elc vm-page.elc vm-pop.elc \
+	vm-reply.elc vm-save.elc vm-search.elc vm-sort.elc vm-startup.elc \
+	vm-summary.elc vm-thread.elc vm-toolbar.elc vm-undo.elc vm-user.elc \
+	vm-vars.elc vm-version.elc vm-virtual.elc vm-window.elc
+
+PRELOADS=-l ./vm-byteopts.el -l ./vm-message.el -l ./vm-misc.el \
+	-l ./vm-vars.el -l ./vm-version.el
+
+INFO_FILES = $(PACKAGE).info*
+
+include ../../XEmacs.rules
+
+all:: $(ELCS) vm-autoload.elc vm.elc auto-autoloads.elc $(PACKAGE).info
+
+vm.elc: $(ELCS)
+	@echo "building vm.elc (with all modules set to autoload)..."
+	@echo "(require 'vm-startup)" > vm.elc
+	@echo "(require 'vm-vars)" >> vm.elc
+	@echo "(require 'vm-version)" >> vm.elc
+	@echo "(require 'vm-autoload)" >> vm.elc
+
+vm-autoload.el: $(ELCS:.elc=.el)
+	@echo scanning sources to build autoload definitions...
+	@echo "(provide 'vm-autoload)" > vm-autoload.el
+	@$(XEMACS) -vanilla -batch -l ./make-autoloads -f print-autoloads \
+		$(ELCS:.elc=.el) >> vm-autoload.el
+
+# VM requires an installed XEmacsen instead of the usual makeinfo
+vm.info: vm.texi
+	xemacs -vanilla -batch -insert vm.texi -l texinfmt -f texinfo-format-buffer -f save-buffer
+
+srckit: srckit-std
+
+binkit: binkit-sourcedatainfo
+# what Emacs version to build VM for.
+# Allowed values are 18 and 19.
+# Version 18 of Emacs is UNSUPPORTED.
+# In fact all versions of Emacs prior to 19.34 for Emacs and
+# prior to 19.14 for XEmacs are unsupported.  For v20 XEmacs
+# EMACS_VERSION should remain 19.
+#
+EMACS_VERSION = 19
+
+# what emacs is called on your system
+EMACS = emacs
+
+# where the Info file should go
+INFODIR = /usr/local/lib/emacs/info
+
+# where the vm.elc, tapestry.elc, etc. files should go
+LISPDIR = /usr/local/lib/emacs/site-lisp
+
+# where the toolbar pixmaps should go.
+# vm-toolbar-pixmap-directory must point to the same place.
+# vm-image-directory must point to the same place.
+PIXMAPDIR = /usr/local/lib/emacs/etc/vm
+
+############## no user servicable parts beyond this point ###################
+
+# no csh please
+SHELL = /bin/sh
+
+# byte compiler options
+BYTEOPTS = ./vm-byteopts.el
+
+# have to preload the files that contain macro definitions or the
+# byte compiler will compile everything that references them
+# incorrectly.  also preload a file that sets byte compiler options.
+PRELOADS = -l $(BYTEOPTS) -l ./vm-message.el -l ./vm-misc.el -l ./vm-vars.el -l ./vm-version.el
+
+# compile with noninteractive and relatively clean environment
+BATCHFLAGS = -batch -q -no-site-file
+
+# files that contain key macro definitions.  almost everything
+# depends on them because the byte-compiler inlines macro
+# expansions.  everything also depends on the byte compiler
+# options file since this might do odd things like turn off
+# certain compiler optimizations.
+CORE = vm-message.el vm-misc.el vm-byteopts.el
+
+OBJECTS = \
+    vm-delete.elc vm-digest.elc vm-easymenu.elc vm-edit.elc vm-folder.elc \
+    vm-license.elc vm-mark.elc vm-menu.elc vm-message.elc \
+    vm-mime.elc vm-minibuf.elc vm-misc.elc vm-mouse.elc \
+    vm-motion.elc vm-page.elc vm-pop.elc vm-reply.elc \
+    vm-save.elc \
+    vm-search.elc vm-sort.elc vm-summary.elc vm-startup.elc vm-thread.elc \
+    vm-toolbar.elc vm-undo.elc \
+    vm-user.elc vm-vars.elc vm-version.elc vm-virtual.elc vm-window.elc
+
+SOURCES = \
+    vm-delete.el vm-digest.el vm-easymenu.el vm-edit.el vm-folder.el \
+    vm-license.el vm-mark.el vm-menu.el vm-message.el \
+    vm-mime.el vm-minibuf.el vm-misc.el vm-mouse.el \
+    vm-motion.el vm-page.el vm-pop.el vm-reply.el vm-save.el \
+    vm-search.el vm-sort.el vm-startup.el vm-summary.el vm-thread.el \
+    vm-toolbar.el vm-undo.el \
+    vm-user.el vm-vars.el vm-version.el vm-virtual.el vm-window.el
+
+vm:	vm.elc
+
+vm.elc:	autoload
+
+noautoload:	$(OBJECTS) tapestry.elc
+	@echo "building vm.elc (with all modules included)..."
+	@cat $(OBJECTS) tapestry.elc > vm.elc
+
+autoload:	vm-autoload.elc $(OBJECTS) tapestry.elc
+	@echo "building vm.elc (with all modules set to autoload)..."
+	@echo "(require 'vm-startup)" > vm.elc
+	@echo "(require 'vm-vars)" >> vm.elc
+	@echo "(require 'vm-version)" >> vm.elc
+	@echo "(require 'vm-autoload)" >> vm.elc
+
+all:	vm.info vm
+
+debug:	$(SOURCES) tapestry.el
+	@echo "building vm.elc (uncompiled, no autoloads)..."
+	@cat $(SOURCES) tapestry.el > vm.elc
+
+install:	all
+	cp vm.info $(INFODIR)/vm
+	cp *.elc $(LISPDIR)
+	cp pixmaps/*.xpm $(PIXMAPDIR)
+
+clean:
+	rm -f vm-autoload.el vm-autoload.elc $(OBJECTS) tapestry.elc
+
+vm.info:	vm.texinfo
+	@echo "making vm.info..."
+	@$(EMACS) $(BATCHFLAGS) -insert vm.texinfo -l texinfmt -f texinfo-format-buffer -f save-buffer
+
+vm-autoload.elc:	$(SOURCES)
+	@echo scanning sources to build autoload definitions...
+	@echo "(provide 'vm-autoload)" > vm-autoload.el
+	@$(EMACS) $(BATCHFLAGS) -l ./make-autoloads -f print-autoloads $(SOURCES) >> vm-autoload.el
+	@echo compiling vm-autoload.el...
+	@$(EMACS) $(BATCHFLAGS) -l $(BYTEOPTS) -f batch-byte-compile vm-autoload.el
+
+vm-delete.elc:	vm-delete.el $(CORE)
+	@echo compiling vm-delete.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-delete.el
+
+vm-digest.elc:	vm-digest.el $(CORE)
+	@echo compiling vm-digest.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-digest.el
+
+vm-edit.elc:	vm-edit.el $(CORE)
+	@echo compiling vm-edit.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-edit.el
+
+vm-folder.elc:	vm-folder.el $(CORE)
+	@echo compiling vm-folder.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-folder.el
+
+vm-license.elc:	vm-license.el $(CORE)
+	@echo compiling vm-license.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-license.el
+
+vm-mark.elc:	vm-mark.el $(CORE)
+	@echo compiling vm-mark.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-mark.el
+
+vm-menu.elc:	vm-menu.el vm-easymenu.el $(CORE)
+	@echo compiling vm-menu.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -l ./vm-easymenu.el -f batch-byte-compile vm-menu.el
+
+vm-message.elc:	vm-message.el $(CORE)
+	@echo compiling vm-message.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-message.el
+
+vm-minibuf.elc:	vm-minibuf.el $(CORE)
+	@echo compiling vm-minibuf.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-minibuf.el
+
+vm-mime.elc:	vm-mime.el $(CORE)
+	@echo compiling vm-mime.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-mime.el
+
+vm-misc.elc:	vm-misc.el $(CORE)
+	@echo compiling vm-misc.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-misc.el
+
+vm-mouse.elc:	vm-mouse.el $(CORE)
+	@echo compiling vm-mouse.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-mouse.el
+
+vm-motion.elc:	vm-motion.el $(CORE)
+	@echo compiling vm-motion.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-motion.el
+
+vm-page.elc:	vm-page.el $(CORE)
+	@echo compiling vm-page.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-page.el
+
+vm-pop.elc:	vm-pop.el $(CORE)
+	@echo compiling vm-pop.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-pop.el
+
+vm-reply.elc:	vm-reply.el $(CORE)
+	@echo compiling vm-reply.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-reply.el
+
+vm-save.elc:	vm-save.el $(CORE)
+	@echo compiling vm-save.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-save.el
+
+vm-search.el:	Makefile vm-search$(EMACS_VERSION).el
+	@echo making vm-search.el...
+	@{ test -f vm-search.el && \
+	  cmp -s vm-search.el vm-search$(EMACS_VERSION).el && \
+	  touch vm-search.el ; } || \
+	 { rm -f vm-search.el; cp vm-search$(EMACS_VERSION).el vm-search.el ; }
+
+vm-search.elc:	vm-search.el $(CORE)
+	@echo compiling vm-search.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-search.el
+
+vm-sort.elc:	vm-sort.el $(CORE)
+	@echo compiling vm-sort.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-sort.el
+
+vm-startup.elc:	vm-startup.el $(CORE)
+	@echo compiling vm-startup.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-startup.el
+
+vm-summary.elc:	vm-summary.el $(CORE)
+	@echo compiling vm-summary.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-summary.el
+
+vm-thread.elc:	vm-thread.el $(CORE)
+	@echo compiling vm-thread.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-thread.el
+
+vm-toolbar.elc:	vm-toolbar.el $(CORE)
+	@echo compiling vm-toolbar.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-toolbar.el
+
+vm-undo.elc:	vm-undo.el $(CORE)
+	@echo compiling vm-undo.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-undo.el
+
+vm-user.elc:	vm-user.el $(CORE)
+	@echo compiling vm-user.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-user.el
+
+vm-vars.elc:	vm-vars.el $(CORE)
+	@echo compiling vm-vars.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-vars.el
+
+vm-version.elc:	vm-version.el $(CORE)
+	@echo compiling vm-version.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-version.el
+
+vm-virtual.elc:	vm-virtual.el $(CORE)
+	@echo compiling vm-virtual.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-virtual.el
+
+vm-window.elc:	vm-window.el $(CORE)
+	@echo compiling vm-window.el...
+	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-window.el
+
+tapestry.elc:	tapestry.el
+	@echo compiling tapestry.el...
+	@$(EMACS) $(BATCHFLAGS) -l $(BYTEOPTS) -f batch-byte-compile tapestry.el
+
+vm-easymenu.elc:	vm-easymenu.el
+	@echo compiling vm-easymenu.el...
+	@$(EMACS) $(BATCHFLAGS) -l $(BYTEOPTS) -f batch-byte-compile vm-easymenu.el
+How to setup VM:
+
+0) Look at the Makefile and change the values of EMACS_VERSION,
+   EMACS, INFODIR, LISPDIR, and PIXMAPDIR.  If they are not right for your
+   system, change them.
+
+   Note that version 18 of Emacs is no longer supported.  VM may
+   or may not work under v18.  The old v18 support code has been left
+   in place for those hardy souls who want to attempt it anyway.
+
+1) Do one of these:
+     `make'.
+     `make vm.info' to build the Info online help document.
+     `make all' to make everything.
+   Ignore the compiler warnings.
+
+2) Put all the .elc files into a Lisp directory that Emacs knows
+   about.  (see load-path).
+
+3) If you're using XEmacs 19.14 and you want toolbar support,
+   make a directory called `vm' in the XEmacs `etc' directory.
+   Copy the files in pixmaps directory into the directory you
+   just created.  VM will look for the pixmap there by default.
+
+   Alternately you can put the pixmap files in any directory you
+   want or just leave them where they are.  Be sure to point the
+   variable vm-toolbar-pixmap-directory at the direrctory where
+   you put the files.
+
+4) If you built the Info document, copy the file vm.info file into
+   the Emacs' info directory under the name "vm".  Edit the "dir"
+   file in that directory and add a menu entry for VM, if it's
+   not in there already.
+
+5) Put these lines in your .emacs file if they aren't there
+   already:
+
+   (autoload 'vm "vm" "Start VM on your primary inbox." t)
+   (autoload 'vm-other-frame "vm" "Like `vm' but starts in another frame." t)
+   (autoload 'vm-visit-folder "vm" "Start VM on an arbitrary folder." t)
+   (autoload 'vm-visit-virtual-folder "vm" "Visit a VM virtual folder." t)
+   (autoload 'vm-mode "vm" "Run VM major mode on a buffer" t)
+   (autoload 'vm-mail "vm" "Send a mail message using VM." t)
+   (autoload 'vm-submit-bug-report "vm" "Send a bug report about VM." t)
+
+You're now ready to use VM.  C-h i should start up the Emacs Info
+system and if you've installed the Info document properly you can
+use the online documentation to teach yourself how to use VM.
+(Note: the Info document is currently only completely accurate for
+version 4 of VM.)
+
+Please use M-x vm-submit-bug-report to report bugs.  The bug report
+will be sent to bug-vm@uunet.uu.net and be gatewayed from there to
+gnu.emacs.vm.bug.
+
+The latest version of VM can usually be found at ftp.uu.net in
+the networking/mail/vm directory.

File dumped-lisp.el

+(setq package-lisp
+	'("vm-loaddefs"
+))
+	

File etc/audio_stamp-colorful.xpm

Added
New image

File etc/audio_stamp-simple.xpm

Added
New image

File etc/autofile-dn.xbm

Added
New image

File etc/autofile-dn.xpm

Added
New image

File etc/autofile-up.xbm

Added
New image

File etc/autofile-up.xpm

Added
New image

File etc/autofile-xx.xbm

Added
New image

File etc/compose-dn.xbm

Added
New image

File etc/compose-dn.xpm

Added
New image

File etc/compose-up.xbm

Added
New image

File etc/compose-up.xpm

Added
New image

File etc/compose-xx.xbm

Added
New image

File etc/delete-dn.xbm

Added
New image

File etc/delete-dn.xpm

Added
New image

File etc/delete-up.xbm

Added
New image

File etc/delete-up.xpm

Added
New image

File etc/delete-xx.xbm

Added
New image

File etc/document-colorful.xpm

Added
New image

File etc/document-simple.xpm

Added
New image

File etc/file-dn.xbm

Added
New image

File etc/file-dn.xpm

Added
New image

File etc/file-up.xbm

Added
New image

File etc/file-up.xpm

Added
New image

File etc/file-xx.xbm

Added
New image

File etc/film-colorful.xpm

Added
New image

File etc/film-simple.xpm

Added
New image

File etc/gear-colorful.xpm

Added
New image

File etc/gear-simple.xpm

Added
New image

File etc/getmail-dn.xbm

Added
New image

File etc/getmail-dn.xpm

Added
New image

File etc/getmail-up.xbm

Added
New image

File etc/getmail-up.xpm

Added
New image

File etc/getmail-xx.xbm

Added
New image

File etc/help-dn.xbm

Added
New image

File etc/help-dn.xpm

Added
New image

File etc/help-up.xbm

Added
New image

File etc/help-up.xpm

Added
New image

File etc/help-xx.xbm

Added
New image

File etc/message-colorful.xpm

Added
New image

File etc/message-simple.xpm

Added
New image

File etc/mime-colorful-dn.xpm

Added
New image

File etc/mime-colorful-up.xpm

Added
New image

File etc/mime-colorful-xx.xpm

Added
New image

File etc/mime-dn.xbm

Added
New image

File etc/mime-simple-dn.xpm

Added
New image

File etc/mime-simple-up.xpm

Added
New image

File etc/mime-simple-xx.xpm

Added
New image

File etc/mime-up.xbm

Added
New image

File etc/mime-xx.xbm

Added
New image

File etc/mona_stamp-colorful.xpm

Added
New image

File etc/mona_stamp-simple.xpm

Added
New image

File etc/next-dn.xbm

Added
New image

File etc/next-dn.xpm

Added
New image

File etc/next-up.xbm

Added
New image

File etc/next-up.xpm

Added
New image

File etc/next-xx.xbm

Added
New image

File etc/previous-dn.xbm

Added
New image

File etc/previous-dn.xpm

Added
New image

File etc/previous-up.xbm

Added
New image

File etc/previous-up.xpm

Added
New image

File etc/previous-xx.xbm

Added
New image

File etc/print-dn.xbm

Added
New image

File etc/print-dn.xpm

Added
New image

File etc/print-up.xbm

Added
New image

File etc/print-up.xpm

Added
New image

File etc/print-xx.xbm

Added
New image

File etc/quit-dn.xbm

Added
New image

File etc/quit-dn.xpm

Added
New image

File etc/quit-up.xbm

Added
New image

File etc/quit-up.xpm

Added
New image

File etc/quit-xx.xbm

Added
New image

File etc/recover-dn.xbm

Added
New image

File etc/recover-dn.xpm

Added
New image

File etc/recover-up.xbm

Added
New image

File etc/recover-up.xpm

Added
New image

File etc/recover-xx.xbm

Added
New image

File etc/reply-dn.xbm

Added
New image

File etc/reply-dn.xpm

Added
New image

File etc/reply-up.xbm

Added
New image

File etc/reply-up.xpm

Added
New image

File etc/reply-xx.xbm

Added
New image

File etc/stuffed_box-colorful.xpm

Added
New image

File etc/stuffed_box-simple.xpm

Added
New image

File etc/undelete-dn.xbm

Added
New image

File etc/undelete-dn.xpm

Added
New image

File etc/undelete-up.xbm

Added
New image

File etc/undelete-up.xpm

Added
New image

File etc/undelete-xx.xbm

Added
New image

File etc/visit-dn.xbm

Added
New image

File etc/visit-dn.xpm

Added
New image

File etc/visit-up.xbm

Added
New image

File etc/visit-up.xpm

Added
New image

File etc/visit-xx.xbm

Added
New image

File make-autoloads

+(defun member (e list)
+  (while (and list (not (equal e (car list))))
+    (setq list (cdr list)))
+  list )
+
+(defun print-autoloads ()
+  (let ((files (cdr (member "print-autoloads" command-line-args)))
+	;; kludge for broken v19 emacs.  it's supposed to accept
+	;; t in autoloads to mean 'macro but it doesn't.  this
+	;; kludge will screw people who try to byte-compile VM
+	;; with emacs18 for emacs19.
+	(macro-flag (if (string-match "^19" emacs-version) ''macro t))
+	sexp function doc interactive macro)
+    (setq expanded-files (mapcar (function expand-file-name) files))
+    (while files
+      (set-buffer (find-file-noselect (car expanded-files)))
+      (goto-char (point-min))
+      (condition-case nil
+	  (while t
+	    (setq sexp (read (current-buffer)))
+	    (if (and (consp sexp) (cdr sexp)
+		     (or (eq (car sexp) 'defun)
+			 (eq (car sexp) 'defmacro)))
+		(progn
+		  (if (eq (car sexp) 'defmacro)
+		      (setq macro macro-flag)
+		    (setq macro nil))
+		  (setq sexp (cdr sexp)
+			function (car sexp)
+			sexp (cdr (cdr sexp)))
+		  (if (stringp (car sexp))
+		      (setq doc (car sexp)
+			    sexp (cdr sexp))
+		    (setq doc nil))
+		  (if (and (consp (car sexp))
+			   (eq (car (car sexp)) 'interactive))
+		      (setq interactive t)
+		    (setq interactive nil))
+		  (if (string-match "\\.el$" (car files))
+		      (setq file (substring (car files) 0 -3))
+		    (setq file (car files)))
+		  (print (list 'autoload (list 'quote function) file
+			       doc interactive macro)))))
+	(end-of-file nil))
+      (kill-buffer (current-buffer))
+      (setq files (cdr files)
+	    expanded-files (cdr expanded-files))))
+  (kill-emacs))

File package-info.in

+(vm
+  (version VERSION
+   description "An Emacs mailer."
+   filename FILENAME
+   md5sum MD5SUM
+   size SIZE
+   provides (vm)
+   requires (REQUIRES)
+   type regular
+))
+;;; Tools to configure your GNU Emacs windows
+;;; Copyright (C) 1991, 1993, 1994, 1995, 1997 Kyle E. Jones 
+;;;
+;;; This program is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 1, or (at your option)
+;;; any later version.
+;;;
+;;; This program is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; A copy of the GNU General Public License can be obtained from this
+;;; program's author (send electronic mail to kyle@uunet.uu.net) or from
+;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
+;;; 02139, USA.
+;;;
+;;; Send bug reports to kyle@uunet.uu.net.
+
+(provide 'tapestry)
+
+(defvar tapestry-version "1.08")
+
+;; Pass state information between the tapestry-set-window-map
+;; and tapestry-set-buffer-map stages.  UGH.  The reason for this
+;; is explained in tapestry-set-buffer-map.
+(defvar tapestry-windows-changed nil)
+
+(defun tapestry (&optional frame-list)
+  "Returns a list containing complete information about the current
+configuration of Emacs frames, windows, buffers and cursor
+positions.  Call the function set-tapestry with the list that this function
+returns to restore the configuration.
+
+Optional first arg FRAME-LIST should be a list of frames; only
+configuration information about these frames will be returned.
+
+The configuration information is returned in a form that can be saved and
+restored across multiple Emacs sessions."
+  (let ((frames (or frame-list (tapestry-frame-list)))
+	(frame-map (tapestry-frame-map))
+	(sf (tapestry-selected-frame))
+	(other-maps nil))
+    (unwind-protect
+	(while frames
+	  (tapestry-select-frame (car frames))
+	  (setq other-maps (cons (list (tapestry-window-map)
+				       (tapestry-buffer-map)
+				       (tapestry-position-map))
+				 other-maps)
+		frames (cdr frames)))
+      (tapestry-select-frame sf))
+    (list frame-map other-maps)))
+
+(defun set-tapestry (map &optional n root-window-edges)
+  "Restore the frame/window/buffer configuration described by MAP,
+which should be a list previously returned by a call to
+tapestry.
+
+Optional second arg N causes frame reconfiguration to be skipped
+and the windows of the current frame will configured according to
+the window map of the Nth frame in MAP.
+
+Optional third arg ROOT-WINDOW-EDGES non-nil should be a list
+containing the edges of a window in the current frame.  This list
+should be in the same form as returned by the `window-edges'
+function.  The window configuration from MAP will be restored in
+this window.  If no window with these exact edges exists, a
+window that lies entirely within the edge coordinates will be
+expanded until the edge coordinates match or the window bounded by
+ROOT-WINDOW-EDGES is entirely contained within the expanded
+window.  If no window entirely within the ROOT-WINDOW-EDGES edge
+coordinates can be found, the window with the greatest overlap of
+ROOT-WINDOW-EDGES will be used."
+  (let ((sf (tapestry-selected-frame))
+	(tapestry-windows-changed nil)
+	frame-list frame-map other-maps other-map)
+    (setq frame-map (nth 0 map)
+	  other-maps (nth 1 map))
+    (if (and root-window-edges (null n))
+	(setq n 1))
+    (if n
+	(let (first-window)
+	  (setq other-map (nth (1- n) other-maps))
+	  (if (null other-map)
+	      (error "No such map, %d" n))
+	  (setq first-window
+		(tapestry-set-window-map (nth 0 other-map) root-window-edges))
+	  (tapestry-set-buffer-map (nth 1 other-map) first-window)
+	  (tapestry-set-position-map (nth 2 other-map) first-window))
+      (tapestry-set-frame-map frame-map)
+      ;; frame list is reversed relative to the map order because
+      ;; created frames are added to the head of the list instead
+      ;; of the tail.
+      (setq frame-list (nreverse (tapestry-frame-list)))
+      (unwind-protect
+	  (while other-maps
+	    (tapestry-select-frame (car frame-list))
+	    (tapestry-set-window-map (nth 0 (car other-maps)))
+	    (tapestry-set-buffer-map (nth 1 (car other-maps)))
+	    (tapestry-set-position-map (nth 2 (car other-maps)))
+	    (setq other-maps (cdr other-maps)
+		  frame-list (cdr frame-list)))
+	(and (tapestry-frame-live-p sf) (tapestry-select-frame sf))))))
+
+(defun tapestry-frame-map ()
+  (let ((map (mapcar 'tapestry-frame-parameters (tapestry-frame-list)))
+	list cell frame-list)
+    (setq list map
+	  frame-list (tapestry-frame-list))
+    (while list
+      (setq cell (assq 'minibuffer (car list)))
+      (if (and cell (windowp (cdr cell)))
+	  (if (eq (tapestry-window-frame (cdr cell)) (car frame-list))
+	      (setcdr cell t)
+	    (setcdr cell 'none)))
+      (setq list (cdr list)
+	    frame-list (cdr frame-list)))
+    map ))
+
+(defun tapestry-set-frame-map (map)
+  ;; some parameters can only be set only at frame creation time.
+  ;; so all existing frames must die.
+  (let ((doomed-frames (tapestry-frame-list)))
+    (while map
+      (tapestry-make-frame (car map))
+      (setq map (cdr map)))
+    (while doomed-frames
+      (tapestry-delete-frame (car doomed-frames))
+      (setq doomed-frames (cdr doomed-frames)))))
+
+(defun tapestry-window-map ()
+  (let (maps map0 map1 map0-edges map1-edges x-unchanged y-unchanged)
+    (setq maps (mapcar 'tapestry-window-edges (tapestry-window-list)))
+    (while (cdr maps)
+      (setq map0 maps)
+      (while (cdr map0)
+	(setq map1 (cdr map0)
+	      map0-edges (tapestry-find-window-map-edges (car map0))
+	      map1-edges (tapestry-find-window-map-edges (car map1))
+	      x-unchanged (and (= (car map0-edges) (car map1-edges))
+			       (= (nth 2 map0-edges) (nth 2 map1-edges)))
+	      y-unchanged (and (= (nth 1 map0-edges) (nth 1 map1-edges))
+			       (= (nth 3 map0-edges) (nth 3 map1-edges))))
+	(cond ((and (not x-unchanged) (not y-unchanged))
+	       (setq map0 (cdr map0)))
+	      ((or (and x-unchanged (eq (car (car map0)) '-))
+		   (and y-unchanged (eq (car (car map0)) '|)))
+	       (nconc (car map0) (list (car map1)))
+	       (setcdr map0 (cdr map1)))
+	      (t
+	       (setcar map0 (list (if x-unchanged '- '|)
+				  (car map0)
+				  (car map1)))
+	       (setcdr map0 (cdr map1))))))
+    (car maps)))
+
+(defun tapestry-set-window-map (map &optional root-window-edges)
+  (let ((map-width (tapestry-compute-map-width map))
+	(map-height (tapestry-compute-map-height map))
+	(root-window nil))
+    (if root-window-edges
+	(let (w-list w-edges w-area
+	      exact-w inside-w overlap-w max-overlap overlap)
+	  (while (null root-window)
+	    (setq exact-w nil
+		  inside-w nil
+		  overlap-w nil
+		  max-overlap -1
+		  w-list (tapestry-window-list))
+	    (while w-list
+	      (setq w-edges (tapestry-window-edges (car w-list))
+		    w-area (tapestry-window-area w-edges))
+	      (if (equal w-edges root-window-edges)
+		  (setq exact-w (car w-list)
+			w-list nil)
+		(setq overlap (tapestry-window-overlap w-edges
+						       root-window-edges)
+		      overlap (if overlap (tapestry-window-area overlap) 0)
+		      w-area (tapestry-window-area w-edges))
+		(if (< max-overlap overlap)
+		    (setq max-overlap overlap
+			  overlap-w (car w-list)))
+		;; set inside-w each time we find a window inside
+		;; the root window edges.  FSF Emacs gives space
+		;; to the window above or to the left if there is
+		;; such a window.  therefore we want to find the
+		;; inside window that is bottom-most or right-most so that
+		;; when we delete it, its space will be given to
+		;; what will be the root window.
+		(if (= w-area overlap)
+		    (setq inside-w (car w-list)))
+		(setq w-list (cdr w-list))))
+	    (cond (exact-w (setq root-window exact-w))
+		  (inside-w
+		   ;; how could a window be inside the root window
+		   ;; edges and there only be one window?  a
+		   ;; multi-line minibuffer, that's how!
+		   (if (not (one-window-p t))
+		       (delete-window inside-w)))
+		  (t (setq root-window overlap-w))))
+	  (tapestry-apply-window-map map map-width map-height root-window)
+	  (setq tapestry-windows-changed t)
+	  root-window )
+      (if (tapestry-windows-match-map map map-width map-height)
+	  (tapestry-first-window)
+	(delete-other-windows)
+	(setq root-window (selected-window))
+	(tapestry-apply-window-map map map-width map-height root-window)
+	(setq tapestry-windows-changed t)
+	root-window ))))
+
+(defun tapestry-buffer-map ()
+  (let ((w-list (tapestry-window-list))
+	b list)
+    (while w-list
+      (setq b (window-buffer (car w-list))
+	    list (cons (list (buffer-file-name b)
+			     (buffer-name b))
+		       list)
+	    w-list (cdr w-list)))
+    (nreverse list)))
+
+;; This version of tapestry-set-buffer-map unconditionally set
+;; the window buffer.  This confused XEmacs 19.14's scroll-up
+;; function when scrolling VM presentation buffers.
+;; end-of-buffer was never signaled after a scroll.  You can
+;; duplicate this by creating a buffer that can be displayed
+;; fully in the current window and then run
+;;
+;;    (progn
+;;      (set-window-buffer (selected-window) (current-buffer))
+;;      (scroll-up nil))
+;;;;;;;;;;;
+;;(defun tapestry-set-buffer-map (buffer-map &optional first-window)
+;;  (let ((w-list (tapestry-window-list first-window)) wb)
+;;    (while (and w-list buffer-map)
+;;      (setq wb (car buffer-map))
+;;      (set-window-buffer
+;;       (car w-list)
+;;       (if (car wb)
+;;	   (or (get-file-buffer (car wb))
+;;	       (find-file-noselect (car wb)))
+;;	 (get-buffer-create (nth 1 wb))))
+;;      (setq w-list (cdr w-list)
+;;	    buffer-map (cdr buffer-map)))))
+
+(defun tapestry-set-buffer-map (buffer-map &optional first-window)
+  (let ((w-list (tapestry-window-list first-window))
+	current-wb proposed-wb cell)
+    (while (and w-list buffer-map)
+      (setq cell (car buffer-map)
+	    proposed-wb (if (car cell)
+			    (or (get-file-buffer (car cell))
+				(find-file-noselect (car cell)))
+			  (get-buffer-create (nth 1 cell)))
+	    current-wb (window-buffer (car w-list)))
+      ;; Setting the window buffer to the same value it already
+      ;; has seems to confuse XEmacs' scroll-up function.  But
+      ;; _not_ setting after windows torn down seem to cause
+      ;; window point to sometimes drift away from point at
+      ;; redisplay time.  The solution (hopefully!) is to track
+      ;; when windows have been rearranged and unconditionally do
+      ;; the set-window-buffer, otherwise do it only if the
+      ;; window buffer and the prosed window buffer differ.
+      (if (or tapestry-windows-changed (not (eq proposed-wb current-wb)))
+	  (set-window-buffer (car w-list) proposed-wb))
+      (setq w-list (cdr w-list)
+	    buffer-map (cdr buffer-map)))))
+
+(defun tapestry-position-map ()
+  (let ((sw (selected-window))
+	(w-list (tapestry-window-list))
+	list)
+    (while w-list
+      (setq list (cons (list (window-start (car w-list))
+			     (window-point (car w-list))
+			     (window-hscroll (car w-list))
+			     (eq (car w-list) sw))
+		       list)
+	    w-list (cdr w-list)))
+    (nreverse list)))
+
+(defun tapestry-set-position-map (position-map &optional first-window)
+  (let ((w-list (tapestry-window-list first-window))
+	(osw (selected-window))
+	sw p)
+    (while (and w-list position-map)
+      (setq p (car position-map))
+      (and (car p) (set-window-start (car w-list) (car p)))
+      (and (nth 1 p) (set-window-point (car w-list) (nth 1 p)))
+      (and (nth 2 p) (set-window-hscroll (car w-list) (nth 2 p)))
+      (and (nth 3 p) (setq sw (car w-list)))
+      ;; move this buffer up in the buffer-list
+      (select-window (car w-list))
+      (setq w-list (cdr w-list)
+	    position-map (cdr position-map)))
+    (select-window (or sw osw))))
+
+(defun tapestry-apply-window-map (map map-width map-height current-window
+				      &optional
+				      root-window-width
+				      root-window-height)
+  (let ((window-min-height 1)
+	(window-min-width 1)
+	horizontal)
+    (if (null root-window-width)
+	(setq root-window-height (window-height current-window)
+	      root-window-width (window-width current-window)))
+    (while map
+      (cond
+       ((numberp (car map)) (setq map nil))
+       ((eq (car map) '-) (setq horizontal nil))
+       ((eq (car map) '|) (setq horizontal t))
+       (t
+	(if (cdr map)
+	    (split-window
+	     current-window
+	     (if horizontal
+		 (/ (* (tapestry-compute-map-width (car map))
+		       root-window-width)
+		    map-width)
+	       (/ (* (tapestry-compute-map-height (car map))
+		     root-window-height)
+		  map-height))
+	     horizontal))
+	(if (not (numberp (car (car map))))
+	    (setq current-window
+		  (tapestry-apply-window-map (car map)
+					     map-width map-height
+					     current-window
+					     root-window-width
+					     root-window-height)))
+	(and (cdr map) (setq current-window (next-window current-window 0)))))
+      (setq map (cdr map)))
+    current-window ))
+
+(defun tapestry-windows-match-map (map
+				   &optional
+				   map-width map-height
+				   window-map
+				   window-map-width
+				   window-map-height)
+  (or map-width
+      (setq map-width (tapestry-compute-map-width map)
+	    map-height (tapestry-compute-map-height map)))
+  (or window-map
+      (setq window-map (tapestry-window-map)
+	    window-map-height (tapestry-compute-map-height window-map)
+	    window-map-width (tapestry-compute-map-width window-map)))
+  (let ((result t))
+    (cond ((numberp (car map))
+	   (and (numberp (car window-map))
+		(= (/ (* (nth 0 map) window-map-width)
+		      map-width)
+		   (nth 0 window-map))
+		(= (/ (* (nth 1 map) window-map-height)
+		      map-height)
+		   (nth 1 window-map))
+		(= (/ (* (nth 2 map) window-map-width)
+		      map-width)
+		   (nth 2 window-map))
+		(= (/ (* (nth 3 map) window-map-height)
+		      map-height)
+		   (nth 3 window-map))))
+	  ((eq (car map) '-)
+	   (if (not (eq (car window-map) '-))
+	       nil
+	     (setq map (cdr map)
+		   window-map (cdr window-map))
+	     (while (and result map window-map)
+	       (setq result (tapestry-windows-match-map (car map)
+						       map-width
+						       map-height
+						       (car window-map)
+						       window-map-width
+						       window-map-height)
+		     map (cdr map)
+		     window-map (cdr window-map)))
+	     (and result (null map) (null window-map))))
+	  ((eq (car map) '|)
+	   (if (not (eq (car window-map) '|))
+	       nil
+	     (setq map (cdr map)
+		   window-map (cdr window-map))
+	     (while (and result map window-map)
+	       (setq result (tapestry-windows-match-map (car map)
+						       map-width
+						       map-height
+						       (car window-map)
+						       window-map-width
+						       window-map-height)
+		     map (cdr map)
+		     window-map (cdr window-map)))
+	     (and result (null map) (null window-map)))))))
+
+(defun tapestry-find-window-map-edges (map)
+  (let (nw-edges se-edges)
+    (setq nw-edges map)
+    (while (and (consp nw-edges) (not (numberp (car nw-edges))))
+      (setq nw-edges (car (cdr nw-edges))))
+    (setq se-edges map)
+    (while (and (consp se-edges) (not (numberp (car se-edges))))
+      (while (cdr se-edges)
+	(setq se-edges (cdr se-edges)))
+      (setq se-edges (car se-edges)))
+    (if (eq nw-edges se-edges)
+	nw-edges
+      (setq nw-edges (copy-sequence nw-edges))
+      (setcdr (nthcdr 1 nw-edges) (nthcdr 2 se-edges))
+      nw-edges )))
+
+(defun tapestry-compute-map-width (map)
+  (let ((edges (tapestry-find-window-map-edges map)))
+    (- (nth 2 edges) (car edges))))
+
+(defun tapestry-compute-map-height (map)
+  (let ((edges (tapestry-find-window-map-edges map)))
+    (- (nth 3 edges) (nth 1 edges))))
+
+;; delq is to memq as delassq is to assq
+(defun tapestry-delassq (elt list)
+  (let ((prev nil)
+	(curr list))
+    (while curr
+      (if (eq elt (car (car curr)))
+	  (if (null prev)
+	      (setq list (cdr list) curr list)
+	    (setcdr prev (cdr curr))
+	    (setq curr (cdr curr)))
+	(setq prev curr curr (cdr curr))))
+    list ))
+
+(defun tapestry-remove-frame-parameters (map params)
+  (let (frame-map)
+    (while params
+      (setq frame-map (nth 0 map))
+      (while frame-map
+	(setcar frame-map (tapestry-delassq (car params) (car frame-map)))
+	(setq frame-map (cdr frame-map)))
+      (setq params (cdr params)))))
+
+(defun tapestry-nullify-tapestry-elements (map &optional buf-file-name buf-name
+					window-start window-point
+					window-hscroll selected-window)
+  (let (p)
+    (setq map (nth 1 map))
+    (while map
+      (setq p (nth 1 (car map)))
+      (while p
+	(and buf-file-name (setcar (car p) nil))
+	(and buf-name (setcar (cdr (car p)) nil))
+	(setq p (cdr p)))
+      (setq p (nth 2 (car map)))
+      (while p
+	(and window-start (setcar (car p) nil))
+	(and window-point (setcar (cdr (car p)) nil))
+	(and window-hscroll (setcar (nthcdr 2 (car p)) nil))
+	(and selected-window (setcar (nthcdr 3 (car p)) nil))
+	(setq p (cdr p)))
+      (setq map (cdr map)))))
+
+(defun tapestry-replace-tapestry-element (map what function)
+  (let (mapi mapj p old new)
+    (cond ((eq what 'buffer-file-name)
+	   (setq mapi 1 mapj 0))
+	   ((eq what 'buffer-name)
+	    (setq mapi 1 mapj 1))
+	   ((eq what 'window-start)
+	    (setq mapi 2 mapj 0))
+	   ((eq what 'window-point)
+	    (setq mapi 2 mapj 1))
+	   ((eq what 'window-hscroll)
+	    (setq mapi 2 mapj 2))
+	   ((eq what 'selected-window)
+	    (setq mapi 2 mapj 3)))
+    (setq map (nth 1 map))
+    (while map
+      (setq p (nth mapi (car map)))
+      (while p
+	(setq old (nth mapj (car p))
+	      new (funcall function old))
+	(if (not (equal old new))
+	    (setcar (nthcdr mapj (car p)) new))
+	(setq p (cdr p)))
+      (setq map (cdr map)))))
+
+(defun tapestry-window-list (&optional first-window)
+  (let* ((first-window (or first-window (tapestry-first-window)))
+	 (windows (cons first-window nil))
+	 (current-cons windows)
+	 (w (next-window first-window 'nomini)))
+    (while (not (eq w first-window))
+      (setq current-cons (setcdr current-cons (cons w nil)))
+      (setq w (next-window w 'nomini)))
+    windows ))
+
+(defun tapestry-first-window ()
+  (if (eq (tapestry-selected-frame)
+	  (tapestry-window-frame (minibuffer-window)))
+      (next-window (minibuffer-window))
+    (let ((w (selected-window))
+	  (top (or (cdr (assq 'menu-bar-lines (tapestry-frame-parameters))) 0))
+	  edges)
+      (while (or (not (= 0 (car (setq edges (tapestry-window-edges w)))))
+		 ;; >= instead of = because in FSF Emacs 19.2x
+		 ;; (whenever the Lucid menubar code was added) the
+		 ;; menu-bar-lines frame parameter == 1 when the
+		 ;; Lucid menubar is enabled even though the
+		 ;; menubar doesn't steal the first line from the
+		 ;; window.
+		 (not (>= top (nth 1 edges))))
+	(setq w (next-window w 'nomini)))
+      w )))
+
+(defun tapestry-window-area (edges)
+  (* (- (nth 3 edges) (nth 1 edges))
+     (- (nth 2 edges) (nth 0 edges))))
+
+(defun tapestry-window-overlap (e0 e1)
+  (let (top left bottom right)
+    (cond ((and (<= (nth 0 e0) (nth 0 e1)) (< (nth 0 e1) (nth 2 e0)))
+	   (setq left (nth 0 e1)))
+	  ((and (<= (nth 0 e1) (nth 0 e0)) (< (nth 0 e0) (nth 2 e1)))
+	   (setq left (nth 0 e0))))
+    (cond ((and (< (nth 0 e0) (nth 2 e1)) (<= (nth 2 e1) (nth 2 e0)))
+	   (setq right (nth 2 e1)))
+	  ((and (< (nth 0 e1) (nth 2 e0)) (<= (nth 2 e0) (nth 2 e1)))
+	   (setq right (nth 2 e0))))
+    (cond ((and (<= (nth 1 e0) (nth 1 e1)) (< (nth 1 e1) (nth 3 e0)))
+	   (setq top (nth 1 e1)))
+	  ((and (<= (nth 1 e1) (nth 1 e0)) (< (nth 1 e0) (nth 3 e1)))
+	   (setq top (nth 1 e0))))
+    (cond ((and (< (nth 1 e0) (nth 3 e1)) (<= (nth 3 e1) (nth 3 e0)))
+	   (setq bottom (nth 3 e1)))
+	  ((and (< (nth 1 e1) (nth 3 e0)) (<= (nth 3 e0) (nth 3 e1)))
+	   (setq bottom (nth 3 e0))))
+    (and left top right bottom (list left top right bottom))))
+
+(defun tapestry-window-edges (&optional window)
+  (if (fboundp 'window-pixel-edges)
+      (let ((edges (window-pixel-edges window))
+	    tmp)
+	(setq tmp edges)
+	(setcar tmp (/ (car tmp) (face-width 'default)))
+	(setq tmp (cdr tmp))
+	(setcar tmp (/ (car tmp) (face-height 'default)))
+	(setq tmp (cdr tmp))
+	(setcar tmp (/ (car tmp) (face-width 'default)))
+	(setq tmp (cdr tmp))
+	(setcar tmp (/ (car tmp) (face-height 'default)))
+	edges )
+    (window-edges window)))
+
+;; We call these functions instead of calling the Emacs 19 frame
+;; functions directly to let this package work with v18 Emacs.
+
+(defun tapestry-frame-list ()
+  (if (fboundp 'frame-list)
+      (frame-list)
+    (list nil)))
+
+(defun tapestry-frame-parameters (&optional f)
+  (if (fboundp 'frame-parameters)
+      (frame-parameters f)
+    nil ))
+
+(defun tapestry-window-frame (w)
+  (if (fboundp 'window-frame)
+      (window-frame w)
+    nil ))
+
+(defun tapestry-modify-frame-parameters (f alist)
+  (if (fboundp 'modify-frame-parameters)
+      (modify-frame-parameters f alist)
+    nil ))
+
+(defun tapestry-select-frame (f)
+  (if (fboundp 'select-frame)
+      (select-frame f)
+    nil ))
+
+(defun tapestry-selected-frame ()
+  (if (fboundp 'selected-frame)
+      (selected-frame)
+    nil ))
+
+(defun tapestry-next-frame (&optional f all)
+  (if (fboundp 'next-frame)
+      (next-frame f all)
+    nil ))
+
+(defun tapestry-make-frame (&optional alist)
+  (if (fboundp 'make-frame)
+      (make-frame alist)
+    nil ))
+
+(defun tapestry-delete-frame (&optional f)
+  (if (fboundp 'delete-frame)
+      (delete-frame f)
+    nil ))
+
+(defun tapestry-frame-live-p (f)
+  (if (fboundp 'frame-live-p)
+      (frame-live-p f)
+    t ))

File vm-autoload.el

+(provide 'vm-autoload)
+
+(autoload (quote vm-location-data-of) "vm-message" nil nil t)
+
+(autoload (quote vm-start-of) "vm-message" nil nil t)
+
+(autoload (quote vm-headers-of) "vm-message" nil nil t)
+
+(autoload (quote vm-vheaders-of) "vm-message" nil nil nil)
+
+(autoload (quote vm-text-of) "vm-message" nil nil nil)
+
+(autoload (quote vm-text-end-of) "vm-message" nil nil t)
+
+(autoload (quote vm-end-of) "vm-message" nil nil t)
+
+(autoload (quote vm-softdata-of) "vm-message" nil nil t)
+
+(autoload (quote vm-number-of) "vm-message" nil nil t)
+
+(autoload (quote vm-padded-number-of) "vm-message" nil nil t)
+
+(autoload (quote vm-mark-of) "vm-message" nil nil t)
+
+(autoload (quote vm-su-start-of) "vm-message" nil nil t)
+
+(autoload (quote vm-su-end-of) "vm-message" nil nil t)
+
+(autoload (quote vm-real-message-sym-of) "vm-message" nil nil t)
+
+(autoload (quote vm-real-message-of) "vm-message" nil nil t)
+
+(autoload (quote vm-reverse-link-of) "vm-message" nil nil t)
+
+(autoload (quote vm-message-type-of) "vm-message" nil nil t)
+
+(autoload (quote vm-message-id-number-of) "vm-message" nil nil t)
+
+(autoload (quote vm-buffer-of) "vm-message" nil nil t)
+
+(autoload (quote vm-thread-indentation-of) "vm-message" nil nil t)
+
+(autoload (quote vm-thread-list-of) "vm-message" nil nil t)
+
+(autoload (quote vm-babyl-frob-flag-of) "vm-message" nil nil t)
+
+(autoload (quote vm-saved-virtual-attributes-of) "vm-message" nil nil t)
+
+(autoload (quote vm-saved-virtual-mirror-data-of) "vm-message" nil nil t)
+
+(autoload (quote vm-virtual-summary-of) "vm-message" nil nil t)
+
+(autoload (quote vm-mime-layout-of) "vm-message" nil nil t)
+
+(autoload (quote vm-mime-encoded-header-flag-of) "vm-message" nil nil t)
+
+(autoload (quote vm-attributes-of) "vm-message" nil nil t)
+
+(autoload (quote vm-new-flag) "vm-message" nil nil t)
+
+(autoload (quote vm-unread-flag) "vm-message" nil nil t)
+
+(autoload (quote vm-deleted-flag) "vm-message" nil nil t)
+
+(autoload (quote vm-filed-flag) "vm-message" nil nil t)
+
+(autoload (quote vm-replied-flag) "vm-message" nil nil t)
+
+(autoload (quote vm-written-flag) "vm-message" nil nil t)
+
+(autoload (quote vm-forwarded-flag) "vm-message" nil nil t)
+
+(autoload (quote vm-edited-flag) "vm-message" nil nil t)
+
+(autoload (quote vm-redistributed-flag) "vm-message" nil nil t)
+
+(autoload (quote vm-cache-of) "vm-message" nil nil t)
+
+(autoload (quote vm-byte-count-of) "vm-message" nil nil t)
+
+(autoload (quote vm-weekday-of) "vm-message" nil nil t)
+
+(autoload (quote vm-monthday-of) "vm-message" nil nil t)
+
+(autoload (quote vm-month-of) "vm-message" nil nil t)
+
+(autoload (quote vm-year-of) "vm-message" nil nil t)
+
+(autoload (quote vm-hour-of) "vm-message" nil nil t)
+
+(autoload (quote vm-zone-of) "vm-message" nil nil t)
+
+(autoload (quote vm-full-name-of) "vm-message" nil nil t)
+
+(autoload (quote vm-from-of) "vm-message" nil nil t)
+
+(autoload (quote vm-message-id-of) "vm-message" nil nil t)
+
+(autoload (quote vm-line-count-of) "vm-message" nil nil t)
+
+(autoload (quote vm-subject-of) "vm-message" nil nil t)
+
+(autoload (quote vm-vheaders-regexp-of) "vm-message" nil nil t)
+
+(autoload (quote vm-to-of) "vm-message" nil nil t)
+
+(autoload (quote vm-to-names-of) "vm-message" nil nil t)
+
+(autoload (quote vm-month-number-of) "vm-message" nil nil t)
+
+(autoload (quote vm-sortable-datestring-of) "vm-message" nil nil t)
+
+(autoload (quote vm-sortable-subject-of) "vm-message" nil nil t)
+
+(autoload (quote vm-summary-of) "vm-message" nil nil t)
+
+(autoload (quote vm-parent-of) "vm-message" nil nil t)
+
+(autoload (quote vm-references-of) "vm-message" nil nil t)
+
+(autoload (quote vm-mirror-data-of) "vm-message" nil nil t)
+
+(autoload (quote vm-edit-buffer-of) "vm-message" nil nil t)
+
+(autoload (quote vm-virtual-messages-of) "vm-message" nil nil t)
+
+(autoload (quote vm-modflag-of) "vm-message" nil nil t)
+
+(autoload (quote vm-labels-of) "vm-message" nil nil t)
+
+(autoload (quote vm-label-string-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-location-data-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-start-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-headers-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-vheaders-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-text-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-text-end-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-end-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-softdata-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-number-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-padded-number-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-mark-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-su-start-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-su-end-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-real-message-sym-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-reverse-link-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-reverse-link-sym-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-message-type-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-message-id-number-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-buffer-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-thread-indentation-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-thread-list-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-babyl-frob-flag-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-saved-virtual-attributes-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-saved-virtual-mirror-data-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-virtual-summary-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-mime-layout-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-mime-encoded-header-flag-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-attributes-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-edited-flag-of) "vm-message" nil nil nil)
+
+(autoload (quote vm-set-cache-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-byte-count-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-weekday-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-monthday-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-month-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-year-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-hour-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-zone-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-full-name-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-from-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-message-id-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-line-count-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-subject-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-vheaders-regexp-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-to-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-to-names-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-month-number-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-sortable-datestring-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-sortable-subject-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-summary-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-parent-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-references-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-mirror-data-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-edit-buffer-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-virtual-messages-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-virtual-messages-sym-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-modflag-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-labels-of) "vm-message" nil nil t)
+
+(autoload (quote vm-set-label-string-of) "vm-message" nil nil t)
+
+(autoload (quote vm-make-message) "vm-message" nil nil nil)
+
+(autoload (quote vm-find-and-set-text-of) "vm-message" nil nil nil)
+
+(autoload (quote vm-virtual-message-p) "vm-message" nil nil nil)
+
+(autoload (quote vm-delete-non-matching-strings) "vm-misc" "Delete strings matching REGEXP from LIST.
+Optional third arg non-nil means to destructively alter LIST, instead of
+working on a copy.
+
+The new version of the list, minus the deleted strings, is returned." nil nil)
+
+(autoload (quote vm-parse) "vm-misc" nil nil nil)
+
+(autoload (quote vm-parse-addresses) "vm-misc" nil nil nil)
+
+(autoload (quote vm-parse-structured-header) "vm-misc" nil nil nil)
+
+(autoload (quote vm-write-string) "vm-misc" nil nil nil)
+
+(autoload (quote vm-marker) "vm-misc" nil nil t)
+
+(autoload (quote vm-increment) "vm-misc" nil nil t)
+
+(autoload (quote vm-decrement) "vm-misc" nil nil t)
+
+(autoload (quote vm-select-folder-buffer) "vm-misc" nil nil t)
+
+(autoload (quote vm-check-for-killed-summary) "vm-misc" nil nil nil)
+
+(autoload (quote vm-check-for-killed-presentation) "vm-misc" nil nil nil)
+
+(autoload (quote vm-check-for-killed-folder) "vm-misc" nil nil nil)
+
+(autoload (quote vm-error-if-folder-read-only) "vm-misc" nil nil t)
+
+(autoload (quote vm-error-if-virtual-folder) "vm-misc" nil nil t)
+
+(autoload (quote vm-build-threads-if-unbuilt) "vm-misc" nil nil t)
+
+(autoload (quote vm-abs) "vm-misc" nil nil nil)
+
+(autoload (quote vm-save-restriction) "vm-misc" nil nil t)
+
+(autoload (quote vm-save-buffer-excursion) "vm-misc" nil nil t)
+
+(autoload (quote vm-last) "vm-misc" nil nil nil)
+
+(autoload (quote vm-vector-to-list) "vm-misc" nil nil nil)
+
+(autoload (quote vm-extend-vector) "vm-misc" nil nil nil)
+
+(autoload (quote vm-obarray-to-string-list) "vm-misc" nil nil nil)
+
+(autoload (quote vm-mapcar) "vm-misc" nil nil nil)
+
+(autoload (quote vm-mapc) "vm-misc" nil nil nil)
+
+(autoload (quote vm-delete) "vm-misc" nil nil nil)
+
+(autoload (quote vm-delete-directory-file-names) "vm-misc" nil nil nil)
+
+(autoload (quote vm-delete-backup-file-names) "vm-misc" nil nil nil)
+
+(autoload (quote vm-delete-auto-save-file-names) "vm-misc" nil nil nil)
+
+(autoload (quote vm-delete-duplicates) "vm-misc" "Delete duplicate equivalent strings from the list.
+If ALL is t, then if there is more than one occurrence of a string in the list,
+ then all occurrences of it are removed instead of just the subsequent ones.
+If HACK-ADDRESSES is t, then the strings are considered to be mail addresses,
+ and only the address part is compared (so that \"Name <foo>\" and \"foo\"
+ would be considered to be equivalent.)" nil nil)
+
+(autoload (quote vm-member-0) "vm-misc" nil nil nil)
+
+(autoload (quote vm-delqual) "vm-misc" nil nil nil)
+
+(autoload (quote vm-copy-local-variables) "vm-misc" nil nil nil)
+
+(autoload (quote vm-error-if-folder-empty) "vm-misc" nil nil nil)
+
+(autoload (quote vm-copy) "vm-misc" nil nil nil)
+
+(autoload (quote vm-multiple-frames-possible-p) "vm-misc" nil nil nil)
+
+(autoload (quote vm-mouse-support-possible-p) "vm-misc" nil nil nil)
+
+(autoload (quote vm-mouse-support-possible-here-p) "vm-misc" nil nil nil)
+
+(autoload (quote vm-menu-support-possible-p) "vm-misc" nil nil nil)
+
+(autoload (quote vm-toolbar-support-possible-p) "vm-misc" nil nil nil)
+
+(autoload (quote vm-multiple-fonts-possible-p) "vm-misc" nil nil nil)
+
+(autoload (quote vm-run-message-hook) "vm-misc" nil nil nil)
+
+(autoload (quote vm-error-free-call) "vm-misc" nil nil nil)
+
+(autoload (quote vm-trace) "vm-misc" nil nil nil)
+
+(autoload (quote vm-timezone-make-date-sortable) "vm-misc" nil nil nil)
+
+(autoload (quote vm-current-time-zone) "vm-misc" nil nil nil)
+
+(autoload (quote vm-should-generate-summary) "vm-misc" nil nil nil)
+
+(autoload (quote vm-find-composition-buffer) "vm-misc" nil nil nil)
+
+(autoload (quote vm-get-file-buffer) "vm-misc" "Like get-file-buffer, but also checks buffers against FILE's truename" nil nil)
+
+(autoload (quote vm-set-region-face) "vm-misc" nil nil nil)
+
+(autoload (quote vm-default-buffer-substring-no-properties) "vm-misc" nil nil nil)
+
+(autoload (quote vm-buffer-string-no-properties) "vm-misc" nil nil nil)
+
+(autoload (quote vm-insert-region-from-buffer) "vm-misc" nil nil nil)
+
+(autoload (quote vm-copy-extent) "vm-misc" nil nil nil)
+
+(autoload (quote vm-make-tempfile-name) "vm-misc" nil nil nil)
+
+(autoload (quote vm-insert-char) "vm-misc" nil nil nil)
+
+(autoload (quote vm-xemacs-compatible-insert-char) "vm-misc" nil nil nil)
+
+(autoload (quote vm-symbol-lists-intersect-p) "vm-misc" nil nil nil)
+
+(autoload (quote vm-set-buffer-variable) "vm-misc" nil nil nil)
+
+(autoload (quote vm-buffer-variable-value) "vm-misc" nil nil nil)
+
+(autoload (quote vm-with-virtual-selector-variables) "vm-misc" nil nil t)
+
+(autoload (quote vm-string-assoc) "vm-misc" nil nil nil)
+
+(autoload (quote vm-string-member) "vm-misc" nil nil nil)
+
+(autoload (quote vm-assert) "vm-misc" nil nil t)
+
+(autoload (quote tapestry) "tapestry" "Returns a list containing complete information about the current
+configuration of Emacs frames, windows, buffers and cursor
+positions.  Call the function set-tapestry with the list that this function
+returns to restore the configuration.
+
+Optional first arg FRAME-LIST should be a list of frames; only
+configuration information about these frames will be returned.
+
+The configuration information is returned in a form that can be saved and
+restored across multiple Emacs sessions." nil nil)
+
+(autoload (quote set-tapestry) "tapestry" "Restore the frame/window/buffer configuration described by MAP,
+which should be a list previously returned by a call to
+tapestry.
+
+Optional second arg N causes frame reconfiguration to be skipped
+and the windows of the current frame will configured according to
+the window map of the Nth frame in MAP.
+
+Optional third arg ROOT-WINDOW-EDGES non-nil should be a list
+containing the edges of a window in the current frame.  This list
+should be in the same form as returned by the `window-edges'
+function.  The window configuration from MAP will be restored in
+this window.  If no window with these exact edges exists, a
+window that lies entirely within the edge coordinates will be
+expanded until the edge coordinates match or the window bounded by
+ROOT-WINDOW-EDGES is entirely contained within the expanded
+window.  If no window entirely within the ROOT-WINDOW-EDGES edge
+coordinates can be found, the window with the greatest overlap of
+ROOT-WINDOW-EDGES will be used." nil nil)
+
+(autoload (quote tapestry-frame-map) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-set-frame-map) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-window-map) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-set-window-map) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-buffer-map) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-set-buffer-map) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-position-map) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-set-position-map) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-apply-window-map) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-windows-match-map) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-find-window-map-edges) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-compute-map-width) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-compute-map-height) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-delassq) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-remove-frame-parameters) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-nullify-tapestry-elements) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-replace-tapestry-element) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-window-list) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-first-window) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-window-area) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-window-overlap) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-window-edges) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-frame-list) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-frame-parameters) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-window-frame) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-modify-frame-parameters) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-select-frame) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-selected-frame) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-next-frame) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-make-frame) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-delete-frame) "tapestry" nil nil nil)
+
+(autoload (quote tapestry-frame-live-p) "tapestry" nil nil nil)
+
+(autoload (quote vm-delete-message) "vm-delete" "Add the `deleted' attribute to the current message.
+
+The message will be physically deleted from the current folder the next
+time the current folder is expunged.
+
+With a prefix argument COUNT, the current message and the next
+COUNT - 1 messages are deleted.  A negative argument means
+the current message and the previous |COUNT| - 1 messages are
+deleted.
+
+When invoked on marked messages (via vm-next-command-uses-marks),
+only marked messages are deleted, other messages are ignored." t nil)
+
+(autoload (quote vm-delete-message-backward) "vm-delete" "Like vm-delete-message, except the deletion direction is reversed." t nil)
+
+(autoload (quote vm-undelete-message) "vm-delete" "Remove the `deleted' attribute from the current message.
+
+With a prefix argument COUNT, the current message and the next
+COUNT - 1 messages are undeleted.  A negative argument means
+the current message and the previous |COUNT| - 1 messages are
+deleted.
+
+When invoked on marked messages (via vm-next-command-uses-marks),
+only marked messages are undeleted, other messages are ignored." t nil)
+
+(autoload (quote vm-kill-subject) "vm-delete" "Delete all messages with the same subject as the current message.
+Message subjects are compared after ignoring parts matched by
+the variables vm-subject-ignored-prefix and vm-subject-ignored-suffix.
+
+The optional prefix argument ARG specifies the direction to move
+if vm-move-after-killing is non-nil.  The default direction is
+forward.  A positive prefix argument means move forward, a
+negative arugment means move backward, a zero argument means
+don't move at all." t nil)
+
+(autoload (quote vm-expunge-folder) "vm-delete" "Expunge messages with the `deleted' attribute.
+For normal folders this means that the deleted messages are
+removed from the message list and the message contents are
+removed from the folder buffer.
+
+For virtual folders, messages are removed from the virtual
+message list.  If virtual mirroring is in effect for the virtual
+folder, the corresponding real messages are also removed from real
+message lists and the message contents are removed from real folders.
+
+When invoked on marked messages (via vm-next-command-uses-marks),
+only messages both marked and deleted are expunged, other messages are
+ignored." t nil)
+
+(autoload (quote vm-no-frills-encapsulate-message) "vm-digest" "Encapsulate a message M for forwarding, simply.
+No message encapsulation standard is used.  The message is
+inserted at point in the current buffer, surrounded by two dashed
+start/end separator lines.  Point is not moved.
+
+M should be a message struct for a real message, not a virtual message.
+This is the message that will be encapsulated.
+KEEP-LIST should be a list of regexps matching headers to keep.
+DISCARD-REGEXP should be a regexp that matches headers to be discarded.
+KEEP-LIST and DISCARD-REGEXP are used to order and trim the headers
+to be forwarded.  See the docs for vm-reorder-message-headers
+to find out how KEEP-LIST and DISCARD-REGEXP are used." nil nil)
+
+(autoload (quote vm-mime-encapsulate-messages) "vm-digest" "Encapsulate the messages in MESSAGE-LIST as per the MIME spec.
+The resulting digest is inserted at point in the current buffer.
+Point is not moved.
+
+MESSAGE-LIST should be a list of message structs (real or virtual).
+These are the messages that will be encapsulated.
+KEEP-LIST should be a list of regexps matching headers to keep.
+DISCARD-REGEXP should be a regexp that matches headers to be discarded.
+KEEP-LIST and DISCARD-REGEXP are used to order and trim the headers
+to be forwarded.  See the docs for vm-reorder-message-headers
+to find out how KEEP-LIST and DISCARD-REGEXP are used.