;;; the shorter is a prefix of the longer, the length of the shorter +
;;; START1 is returned. The arguments must be simple strings.
;;;
-;;; This would be done on the Vax with CMPC3.
+;;; This would be done on the Vax with CMPC3.
(defun %sp-string-compare (string1 start1 end1 string2 start2 end2)
(declare (simple-string string1 string2))
(declare (fixnum start1 end1 start2 end2))
(let ((len1 (- end1 start1))
- (len2 (- end2 start2)))
+ (len2 (- end2 start2)))
(declare (fixnum len1 len2))
(cond
((= len1 len2)
(do ((index1 start1 (1+ index1))
- (index2 start2 (1+ index2)))
- ((= index1 end1) nil)
- (declare (fixnum index1 index2))
- (if (char/= (schar string1 index1) (schar string2 index2))
- (return index1))))
+ (index2 start2 (1+ index2)))
+ ((= index1 end1) nil)
+ (declare (fixnum index1 index2))
+ (if (char/= (schar string1 index1) (schar string2 index2))
+ (return index1))))
((> len1 len2)
(do ((index1 start1 (1+ index1))
- (index2 start2 (1+ index2)))
- ((= index2 end2) index1)
- (declare (fixnum index1 index2))
- (if (char/= (schar string1 index1) (schar string2 index2))
- (return index1))))
+ (index2 start2 (1+ index2)))
+ ((= index2 end2) index1)
+ (declare (fixnum index1 index2))
+ (if (char/= (schar string1 index1) (schar string2 index2))
+ (return index1))))
(t
(do ((index1 start1 (1+ index1))
- (index2 start2 (1+ index2)))
- ((= index1 end1) index1)
- (declare (fixnum index1 index2))
- (if (char/= (schar string1 index1) (schar string2 index2))
- (return index1)))))))
+ (index2 start2 (1+ index2)))
+ ((= index1 end1) index1)
+ (declare (fixnum index1 index2))
+ (if (char/= (schar string1 index1) (schar string2 index2))
+ (return index1)))))))
;;; like %SP-STRING-COMPARE, only backwards
(defun %sp-reverse-string-compare (string1 start1 end1 string2 start2 end2)
(declare (simple-string string1 string2))
(declare (fixnum start1 end1 start2 end2))
(let ((len1 (- end1 start1))
- (len2 (- end2 start2)))
+ (len2 (- end2 start2)))
(declare (fixnum len1 len2))
(cond
((= len1 len2)
(do ((index1 (1- end1) (1- index1))
- (index2 (1- end2) (1- index2)))
- ((< index1 start1) nil)
- (declare (fixnum index1 index2))
- (if (char/= (schar string1 index1) (schar string2 index2))
- (return index1))))
+ (index2 (1- end2) (1- index2)))
+ ((< index1 start1) nil)
+ (declare (fixnum index1 index2))
+ (if (char/= (schar string1 index1) (schar string2 index2))
+ (return index1))))
((> len1 len2)
(do ((index1 (1- end1) (1- index1))
- (index2 (1- end2) (1- index2)))
- ((< index2 start2) index1)
- (declare (fixnum index1 index2))
- (if (char/= (schar string1 index1) (schar string2 index2))
- (return index1))))
+ (index2 (1- end2) (1- index2)))
+ ((< index2 start2) index1)
+ (declare (fixnum index1 index2))
+ (if (char/= (schar string1 index1) (schar string2 index2))
+ (return index1))))
(t
(do ((index1 (1- end1) (1- index1))
- (index2 (1- end2) (1- index2)))
- ((< index1 start1) index1)
- (declare (fixnum index1 index2))
- (if (char/= (schar string1 index1) (schar string2 index2))
- (return index1)))))))
+ (index2 (1- end2) (1- index2)))
+ ((< index1 start1) index1)
+ (declare (fixnum index1 index2))
+ (if (char/= (schar string1 index1) (schar string2 index2))
+ (return index1)))))))