;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*-
;;; Patch file for System version 123.249
;;; Reason:
;;;  (mismatch seq1 seq2 :from-end t) where seq2 was shorter than seq1
;;;  could loop infinitely.
;;; Written 4-May-88 12:18:35 by pld at site Gigamos Cambridge
;;; while running on Azathoth from band 3
;;; with Experimental System 123.247, Experimental Local-File 73.4, Experimental FILE-Server 22.2, Experimental Unix-Interface 11.0, Experimental KERMIT 34.3, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, Experimental Tape 22.3, Experimental Serial-IP 1.1, Experimental Tiger 27.1, microcode 1756, SDU Boot Tape 3.14, SDU ROM 8, the old ones.



; From modified file DJ: L.SYS; GENRIC.LISP#57 at 4-May-88 12:18:36
#10R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS; GENRIC  "

(defun mismatch-sequences-from-end (sequence1 sequence2 start1 end1 start2 end2
				    test invertp key)
  (or test (setq test #'eql))
  (let ((compare-length (min (- end1 start1) (- end2 start2))))
    (do ((index1 (seq-start sequence1 (- end1 compare-length)))
	 (index2 (seq-start sequence2 (- end2 compare-length)))
	 (i (- end1 compare-length) (1+ i))
	 (last-mismatch-index1 (unless (= (- end1 start1) (- end2 start2))
				 (- end1 compare-length))))
	((= i end1)
	 last-mismatch-index1)
      (unless (eq invertp (not (funcall test (key-fetch-inc key sequence1 index1)
					     (key-fetch-inc key sequence2 index2))))
	(setq last-mismatch-index1 (1+ i))))))

))
