+(export 'zone-records-sorted)
+(defun zone-records-sorted (zone)
+ "Return the ZONE's records, in a pleasant sorted order."
+ (sort (copy-seq (zone-records zone))
+ (lambda (zr-a zr-b)
+ (let* ((name-a (zr-name zr-a)) (pos-a (length name-a))
+ (name-b (zr-name zr-b)) (pos-b (length name-b)))
+ (loop (let ((dot-a (or (position #\. name-a
+ :from-end t :end pos-a)
+ -1))
+ (dot-b (or (position #\. name-b
+ :from-end t :end pos-b)
+ -1)))
+ (cond ((string< name-a name-b
+ :start1 (1+ dot-a) :end1 pos-a
+ :start2 (1+ dot-b) :end2 pos-b)
+ (return t))
+ ((string> name-a name-b
+ :start1 (1+ dot-a) :end1 pos-a
+ :start2 (1+ dot-b) :end2 pos-b)
+ (return nil))
+ ((= dot-a dot-b -1)
+ (return (string< (zr-type zr-a) (zr-type zr-b))))
+ ((= dot-a -1)
+ (return t))
+ ((= dot-b -1)
+ (return nil))
+ (t
+ (setf pos-a dot-a)
+ (setf pos-b dot-b)))))))))
+