anchor.diff:    (< mark1 (offset mark2)))
   
   (defgeneric mark<= (mark1 mark2)
  -  (:documentation "Return t if the offset of mark1 is less than or equal to that of
  -mark2.  An error is signaled if the two marks are not positioned in
  -the same buffer.  It is acceptable to pass an offset in place of one
  -of the marks."))
  +  (:documentation "Return T if the offset of `mark1' is less than
  +or equal to that of `mark2'.  An error is signaled if the two
  +marks are not positioned in the same buffer.  It is acceptable to
  +pass an offset in place of one of the marks."))
   
   (defmethod mark<= ((mark1 mark-mixin) (mark2 mark-mixin))
     (assert (eq (buffer mark1) (buffer mark2)))
  
positive.code:   (setf (offset mark) (size (buffer mark))))
  
  (defgeneric beginning-of-buffer-p (mark)
    (:documentation "Return t if the mark is at the beginning of
   the buffer, nil otherwise."))
  
  (defmethod beginning-of-buffer-p ((mark mark-mixin))
    (zerop (offset mark)))
  
  (defgeneric end-of-buffer-p (mark)
    (:documentation "Return t if the mark is at the end of the buffer, nil otherwise."))
  
  (defmethod end-of-buffer-p ((mark mark-mixin))
    (= (offset mark) (size (buffer mark))))
  
  (defgeneric beginning-of-line-p (mark)
    (:documentation "Return t if the mark is at the beginning of the line (i.e., if the
  character preceding the mark is a newline character or if the mark is
  at the beginning of the buffer), nil otherwise."))
  
  (defmethod beginning-of-line-p ((mark mark-mixin))
    (or (beginning-of-buffer-p mark)
        (eql (object-before mark) #\Newline)))
  
  (defgeneric end-of-line-p (mark)
    (:documentation "Return t if the mark is at the end of the line (i.e., if the character
  following the mark is a newline character, or if the mark is at the
  end of the buffer), nil otherwise."))
  
  (defmethod end-of-line-p ((mark mark-mixin))
    (or (end-of-buffer-p mark)
        (eql (object-after mark) #\Newline)))
  
  (defgeneric beginning-of-line (mark)
    (:documentation "Move the mark to the beginning of the line.  The mark will be
   positioned either immediately after the closest preceding newline
   character, or at the beginning of the buffer if no preceding newline
   character exists. Returns mark."))
  
  (defmethod beginning-of-line :around (mark)
    (call-next-method)
  
negative.code:   (setf (element* (slot-value buffer 'contents) offset) object))
  
  (defgeneric buffer-sequence (buffer offset1 offset2)
    (:documentation "Return the contents of the buffer starting at
  `offset1' and ending at `offset2-1' as a sequence.  If either of
  the offsets is less than zero or greater than or equal to the
  size of the buffer, a `no-such-offset' condition is signaled.  If
  `offset2' is smaller than or equal to `offset1', an empty
  sequence will be returned."))
  
  (defmethod buffer-sequence ((buffer standard-buffer) offset1 offset2)
    (assert (<= 0 offset1) ()
  