;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 123.283
;;; Reason:
;;;  ZWEI was getting the section name of a DEFSTRUCT incorrectly
;;; Written 16-May-88 12:03:05 by pld at site Gigamos Cambridge
;;; while running on Fish food from band 1
;;; with Experimental System 123.267, Experimental Local-File 73.5, Experimental FILE-Server 22.5, Experimental Unix-Interface 11.0, Experimental KERMIT 34.3, Experimental ZMail 71.2, Experimental Lambda-Diag 15.0, Experimental Tape 22.4, microcode 1756, SDU Boot Tape 3.14, SDU ROM 103, patch/experimental.



; From file DJ: L.ZWEI; SECTIO.LISP#294 at 16-May-88 12:03:10
#8R ZWEI#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "ZWEI")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: ZWEI; SECTIO  "

(DEFUN (:PROPERTY :LISP GET-SECTION-NAME) (LINE BP &AUX STR SYM ERROR-P
					   IDX END-IDX (EOF "") NON-FONT-LINE)
  (IF (NOT (AND (> (LENGTH LINE) 1) (CHAR-EQUAL (CHAR LINE 0) #/()))
      (VALUES NIL NIL T)
    (SETQ ERROR-P T)
    (WHEN (AND (%STRING-EQUAL LINE 0 "(DEF" 0 4)
	       (NOT (%STRING-EQUAL LINE 0 "(DEFPROP " 0 9))
	       (SETQ IDX (STRING-SEARCH-SET *WHITESPACE-CHARS* LINE))
 	       (SETQ IDX (STRING-SEARCH-NOT-SET *WHITESPACE-CHARS* LINE IDX)))
     (SETQ NON-FONT-LINE (STRING-REMOVE-FONTS LINE))
     (dotimes (i 2)
       ;;Kludge -- (defstruct (abc :opt1 xx :opt2 xxx)  parses fine
       ;;          (defstruct (abc :opt1 xx
       ;;                          :opt2 xxx)           doesn't
       ;;If we run out of line on first try and start idx is "(", try again skipping the "("
       (SETQ ERROR-P NIL)
       (CONDITION-CASE ()
	  (MULTIPLE-VALUE-SETQ (SYM END-IDX)
	    (CL:READ-FROM-STRING NON-FONT-LINE NIL EOF :START IDX))
	(:NO-ERROR
	 (cond ((EQ SYM EOF)
		(SETQ ERROR-P T)
		(if (eq (char non-font-line idx) #/()
		    (incf idx)
		  (return)))
	       (t
		(SETQ STR (SUBSTRING NON-FONT-LINE IDX (MIN (LENGTH LINE) END-IDX))))))
	(SYS:PARSE-ERROR
	 (SETQ STR (GET-DEFUN-NAME (MOVE-BP BP LINE 0)))))
       (UNLESS ERROR-P
	 (MULTIPLE-VALUE-SETQ (SYM NIL ERROR-P)
	   (SYMBOL-FROM-STRING STR NON-FONT-LINE NIL SYM))
	 ;;No error, all is cool
	 (return))))
    (WHEN ERROR-P
      (SETQ SYM (CONCATENATE 'STRING
			     (LET ((BUFFER (NODE-TOP-LEVEL-NODE (LINE-NODE LINE))))
			       (IF (safe-get-zwei-buffer-instance-variable BUFFER 'PATHNAME)
				   (LET ((NAME
					   (PATHNAME-NAME (BUFFER-PATHNAME BUFFER))))
				     (IF (CONSP NAME)
					 (APPLY #'STRING-APPEND
						(MAPCAR (LAMBDA (NAME-ELT)
							  (IF (CONSP NAME-ELT)
							      (CAR NAME-ELT) NAME-ELT))
							NAME))
				       (STRING NAME)))
				 (or (safe-get-zwei-buffer-instance-variable BUFFER 'name)
				     "SECTION")))
			     "-"
			     (LET ((START-INDEX (STRING-SEARCH-NOT-CHAR #/( LINE)))
			       (SUBSTRING LINE START-INDEX
					  (AND START-INDEX
					       (STRING-SEARCH-SET *WHITESPACE-CHARS*
								  LINE START-INDEX))))
			     "-"
			     (PRIN1-TO-STRING (INCF *SECTION-COUNT*)))
	    STR SYM))
    (VALUES SYM STR NIL)))

))
