From 9d90bb929b5cfac2be52a1e5ba99af867276ab40 Mon Sep 17 00:00:00 2001
From: Chris Hanson <org/chris-hanson/cph>
Date: Tue, 24 Aug 1993 06:11:48 +0000
Subject: [PATCH] Add code to update an alist in the fixed-objects vector. 
 This alist is used by the microcode's "auto-save on exit" feature.

---
 v7/src/edwin/autosv.scm | 52 ++++++++++++++++++++++++++++++++++-------
 1 file changed, 43 insertions(+), 9 deletions(-)

diff --git a/v7/src/edwin/autosv.scm b/v7/src/edwin/autosv.scm
index 29ed66b84..2911b76d0 100644
--- a/v7/src/edwin/autosv.scm
+++ b/v7/src/edwin/autosv.scm
@@ -1,8 +1,8 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;	$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/autosv.scm,v 1.27 1991/05/14 02:03:05 cph Exp $
+;;;	$Id: autosv.scm,v 1.28 1993/08/24 06:11:48 cph Exp $
 ;;;
-;;;	Copyright (c) 1986, 1989-91 Massachusetts Institute of Technology
+;;;	Copyright (c) 1986, 1989-93 Massachusetts Institute of Technology
 ;;;
 ;;;	This material was developed by the Scheme project at the
 ;;;	Massachusetts Institute of Technology, Department of
@@ -102,16 +102,50 @@ This file is not the file you visited; that changes only when you save."
       (disable-buffer-auto-save! buffer)))
 
 (define (enable-buffer-auto-save! buffer)
-  (set-buffer-auto-save-pathname!
-   buffer
-   (let ((pathname (buffer-pathname buffer)))
-     (if (and pathname (ref-variable auto-save-visited-file-name))
-	 pathname
-	 (os/auto-save-pathname pathname buffer)))))
+  (let ((pathname
+	 (let ((pathname (buffer-pathname buffer)))
+	   (if (and pathname (ref-variable auto-save-visited-file-name))
+	       pathname
+	       (os/auto-save-pathname pathname buffer)))))
+    (without-interrupts
+     (lambda ()
+       (set-buffer-auto-save-pathname! buffer pathname)
+       (add-group-microcode-entry (buffer-group buffer)
+				  (->namestring pathname))
+       (add-kill-buffer-hook buffer auto-save-kill-buffer-hook)))))
 
 (define (disable-buffer-auto-save! buffer)
-  (set-buffer-auto-save-pathname! buffer false))
+  (without-interrupts
+   (lambda ()
+     (set-buffer-auto-save-pathname! buffer false)
+     (remove-group-microcode-entry (buffer-group buffer))
+     (remove-kill-buffer-hook buffer auto-save-kill-buffer-hook))))
+
+(define (auto-save-kill-buffer-hook buffer)
+  (without-interrupts
+   (lambda ()
+     (remove-group-microcode-entry (buffer-group buffer)))))
 
+(define add-group-microcode-entry)
+(define remove-group-microcode-entry)
+(let ((index (fixed-objects-vector-slot 'EDWIN-AUTO-SAVE)))
+  (set! add-group-microcode-entry
+	(lambda (group namestring)
+	  (let ((vector (get-fixed-objects-vector)))
+	    (let ((alist (vector-ref vector index)))
+	      (let ((entry (assq group alist)))
+		(if entry
+		    (set-cdr! entry namestring)
+		    (vector-set! vector
+				 index
+				 (cons (cons group namestring) alist))))))))
+  (set! remove-group-microcode-entry
+	(lambda (group)
+	  (let ((vector (get-fixed-objects-vector)))
+	    (vector-set! vector
+			 index
+			 (del-assq! group (vector-ref vector index)))))))
+
 (define (delete-auto-save-file! buffer)
   (and (ref-variable delete-auto-save-files)
        (let ((auto-save-pathname (buffer-auto-save-pathname buffer)))
-- 
2.25.1