;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:10; Patch-File:T -*-
;;; Patch file for System version 124.28
;;; Reason:
;;;  The code that was added to (zwei:last-resort-possibility) to deal with
;;;  package roots was totally broken....
;;; Written 6-Jun-88 16:05:56 by wkf (William K. Foster) at site Gigamos Cambridge
;;; while running on Orson Welles from band 2
;;; with Experimental System 124.21, Experimental Local-File 74.1, Experimental File-Server 23.1, Experimental Unix-Interface 12.0, Experimental ZMail 72.0, Experimental Tape 23.6, Experimental Lambda-Diag 16.1, microcode 1756, SDU Boot Tape 3.144, SDU ROM 8, Kenvironment Loaded..



; From modified file DJ: L.ZWEI; POSS.LISP#103 at 6-Jun-88 16:05:57
#10R ZWEI#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "ZWEI")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: ZWEI; POSS  "

(DEFUN LAST-RESORT-POSSIBILITY (BP OBJECT &REST IGNORE &AUX DWIMIFIED-OBJECT)
  (MOVE-BP BP (BEG-OF-LINE (BP-LINE BP)))
  (INSERT-POSSIBILITY-BEFORE-AND-GO BP
    (COND ((AND (SETQ DWIMIFIED-OBJECT (SYS:DWIMIFY-PACKAGE-0 OBJECT 'ZMACS-DEFINEDP))
		(NOT (EQUAL OBJECT DWIMIFIED-OBJECT)))
	   `(EDIT-DEFINITION-POSSIBILITY ,DWIMIFIED-OBJECT))
	  ((AND (FDEFINEDP OBJECT)
		(LET ((DEF (FDEFINITION OBJECT)))
		  (COND
		    ;;if the objects definition is found in a file that is written in a
		    ;;corresponding package
		    ((and (symbolp object)
			  (get (symbol-package object) :prefix)
			  (not (get object 'zmacs-buffers)))
		     (pkg-goto (symbol-package object))
		     (resectionize-buffer
		       (find-file
			 (send (cadar (get object :source-file-name))
			       :new-pathname
			       :type "LISP"
			       :version :Newest)))
		     `(edit-definition-possibility ,object))
		    ;; If the object's definition is a symbol, offer that symbol's definition.
		    ((AND (SYMBOLP DEF)
			  (FQUERY NIL "The definition of ~S is ~S.  Visit ~1@*~S? " OBJECT DEF))
		     `(EDIT-DEFINITION-POSSIBILITY ,DEF))
		    ;; If the definition has a different name, offer that name.
		    ((AND (ATOM DEF)
			  (NOT (FUNCTIONP DEF)))
		     (BARF "The definition of is ~S is weird: ~S" OBJECT DEF))
		    ((AND (NOT (EQUAL (FUNCTION-NAME DEF) OBJECT))
			  (FQUERY NIL "The definition of ~S has the name ~S.  Visit ~1@*~S? "
				  OBJECT (FUNCTION-NAME DEF)))
		     `(EDIT-DEFINITION-POSSIBILITY ,(FUNCTION-NAME DEF)))
		    ;; If object has an expr definition, offer to grind it into a new buffer.
		    ((AND (OR (CONSP DEF)
			      (SI:FUNCTION-SPEC-GET OBJECT ':PREVIOUS-EXPR-DEFINITION))
			  (FQUERY NIL "Grind the definition of ~S into a new buffer? " OBJECT))
		     (MAKE-BUFFER-CURRENT (CREATE-ONE-BUFFER-TO-GO (FORMAT NIL "~S" OBJECT)))
		     (RETURN-FROM LAST-RESORT-POSSIBILITY
		       (SI:GRIND-1 OBJECT 90.
				   (INTERVAL-STREAM-INTO-BP (INTERVAL-LAST-BP *INTERVAL*)))))
		    ((AND (TYPEP DEF 'MICROCODE-FUNCTION)
			  (FQUERY NIL "~S is a microcoded function.  Search through UCODE? "
				  OBJECT))
		     `(TAGS-SEARCH-SYSTEM-POSSIBILITY
			,(SELECT-PROCESSOR
			   (:CADR 'UCODE)
			   (:LAMBDA 'LAMBDA-UCODE)
			   (:EXPLORER 'LAMBDA-UCODE))
			,(FORMAT NIL "(misc-inst-entry ~A)" OBJECT)))
		    (T
		     NIL)))))
	  (T
	   (OR *MINI-BUFFER-COMMAND*
	       (SETQ *MINI-BUFFER-COMMAND*
		     `((COM-EDIT-DEFINITION NIL 1)
		       ,(FORMAT NIL "~S" OBJECT))))
	   (LET ((FILE (READ-DEFAULTED-PATHNAME (FORMAT NIL "Read ~S from what file:"
							(STRING-FROM-SPEC OBJECT))
						(PATHNAME-DEFAULTS))))
	     ;; Now that we know the filename, insert a fetch-source-file possibility
	     ;; for it BEFORE the last-resort-possibility, and then do it.
	     ;; So the last-resort-possibility remains the last thing.
	     `(FETCH-SOURCE-FILE-POSSIBILITY ,OBJECT ,FILE))))))

))
