anchor.diff:      :initform nil
       :initarg :tail-line
       :accessor buffer-tail-line)
  -   (cache-line
  -    :initform nil
  -    :initarg :cache-line
  -    :accessor buffer-cache-line)
  -   (cache-linum
  -    :initform nil
  -    :initarg :cache-linum
  -    :accessor buffer-cache-linum)
      (mark-p
       :initform nil
       :initarg :mark-p
  
positive.code:     (setf (buffer-mark-p buffer) nil)
      t))
  
  (defun %buffer-get-line (buffer linum)
    (cond
      ((= linum (buffer-cache-linum buffer))
       (buffer-cache-line buffer))
      ((> linum (buffer-cache-linum buffer))
       (if (< (- linum (buffer-cache-linum buffer))
  	    (- (buffer-nlines buffer) linum))
  	 (line-forward-n
  	  (buffer-cache-line buffer)
  	  (- linum (buffer-cache-linum buffer)))
  	 (line-backward-n
  	  (buffer-tail-line buffer)
  	  (- (buffer-nlines buffer) linum))))
      (t
       (if (< (1- linum)
  	    (- (buffer-cache-linum buffer) linum))
  	 (line-forward-n
  	  (buffer-head-line buffer)
  	  (1- linum))
  	 (line-backward-n
  	  (buffer-cache-line buffer)
  	  (- (buffer-cache-linum buffer) linum))))))
  
  (defun check-linum (buffer linum)
    (unless (<= 1 linum (buffer-nlines buffer))
      (error "invalid line number: ~A" linum)))
  
negative.code: 
  (defun buffer-get-line (buffer linum)
    (check-linum buffer linum)
    (line-forward-n (buffer-head-line buffer) (1- linum)))
  
  (defun buffer-get-char (buffer linum charpos)
    (let ((line (buffer-get-line buffer linum)))
  