anchor.diff:      ;; because they're considered immutable.
       ;; When edited (changed, substituted),
       ;; a new copy replaces the old one.
  -    (SETF (BUFFER-CUT-LINES BUFFER)
  -          (subseq (buffer-lines buffer) curr (1+ last))))
  -  ) ;;CMD-COPY
  +    (setf (buffer-cut-lines buffer)
  +          (subseq (buffer-lines buffer) curr (1+ last)))))
   
    
  -(DEFUN CMD-PASTE (BUFFER FROM TO ARG)
  +(defun cmd-paste (buffer from to arg)
     (declare (ignore from arg))
  -  (DBG (FORMAT T "CMD-PASTE: ~%"))
  +  (dbg (format t "CMD-PASTE: ~%"))
     ;; (.)x    Copies (puts) the contents of the cut buffer to after the
     ;;         addressed  line.   The current address is set to the last
     ;;         line copied.
     (with-addresses (buffer (curr to 0))
  -    (BUFFER-SAVE-UNDO BUFFER)
  -    (do-paste buffer curr (copy-seq (buffer-cut-lines buffer))))
  -  ) ;;CMD-PASTE
  -
  -
  -(DEFUN CMD-UNDO (BUFFER FROM TO ARG)
  +    (buffer-save-undo buffer)
  +    (do-paste buffer curr (copy-seq (buffer-cut-lines buffer)))))
  +
  +
  +(defun cmd-undo (buffer from to arg)
     (declare (ignore from to arg))
  -  (DBG (FORMAT T "CMD-UNDO: ~%"))
  +  (dbg (format t "CMD-UNDO: ~%"))
     ;; u       Undoes the last command and restores the current  address
     ;;         to  what  it was before the command.  The global commands
     ;;         `g', `G', `v', and `V'.  are treated as a single  command
     ;;         by undo.  `u' is its own inverse.
  -  (buffer-swap-undo buffer)
  -  ) ;;CMD-UNDO
  -
  -
  -
  -(DEFUN CMD-COPY-LINES (BUFFER FROM TO ARG)
  -  (DBG (FORMAT T "CMD-COPY-LINES: ~%"))
  +  (buffer-swap-undo buffer))
  +
  +
  +
  +(defun cmd-copy-lines (buffer from to arg)
  +  (dbg (format t "CMD-COPY-LINES: ~%"))
     ;; (.,.)t(.)
     ;;         Copies (i.e., transfers) the addressed lines to after the
     ;;         right-hand destination address, which may be the  address
     ;;         0  (zero).   The  current address is set to the last line
     ;;         copied.
     (with-addresses (buffer (curr from 1) (last to 1) (target arg 0))
  -    (BUFFER-SAVE-UNDO BUFFER)
  -    (do-paste buffer arg (subseq (buffer-lines buffer) curr (1+ last))))
  -  ) ;;CMD-COPY-LINES
  -
  -
  -(DEFUN CMD-MOVE-LINES (BUFFER FROM TO ARG)
  -  (DBG (FORMAT T "CMD-MOVE-LINES: ~%"))
  +    (buffer-save-undo buffer)
  +    (do-paste buffer arg (subseq (buffer-lines buffer) curr (1+ last)))))
  +
  +
  +(defun cmd-move-lines (buffer from to arg)
  +  (dbg (format t "CMD-MOVE-LINES: ~%"))
     ;; (.,.)m(.)
     ;;         Moves lines in the buffer.  The addressed lines are moved
     ;;         to after the right-hand destination address, which may be
     ;;         the address 0 (zero).  The current address is set to  the
     ;;         last line moved.
     (with-addresses (buffer (curr from 1) (last to 1) (target arg 0))
  -    (BUFFER-SAVE-UNDO BUFFER)
  -    (do-paste buffer arg (do-cut buffer curr last)))
  -  ) ;;CMD-MOVE-LINES
  -
  -
  -(DEFUN CMD-CHANGE-LINES (BUFFER FROM TO ARG)
  -  (DBG (FORMAT T "CMD-CHANGE-LINES: ~%"))
  +    (buffer-save-undo buffer)
  +    (do-paste buffer arg (do-cut buffer curr last))))
  +
  +
  +(defun cmd-change-lines (buffer from to arg)
  +  (dbg (format t "CMD-CHANGE-LINES: ~%"))
     ;; (.,.)c  Changes  lines  in  the  buffer.  The addressed lines are
     ;;         deleted from the buffer, and text is  appended  in  their
     ;;         place.   Text  is  entered  in  input  mode.  The current
     ;;         address is set to last line entered.
     (with-addresses (buffer (curr from 1) (last to 1) (target arg 0))
  -    (BUFFER-SAVE-UNDO BUFFER)
  +    (buffer-save-undo buffer)
       (setf (buffer-cut-lines buffer) (do-cut buffer curr last))
  -    (do-insert buffer curr))
  -  ) ;;CMD-CHANGE-LINES
  -
  -
  -(DEFUN CMD-JOIN-LINES (BUFFER FROM TO ARG)
  +    (do-insert buffer curr)))
  +
  +
  +(defun cmd-join-lines (buffer from to arg)
     (declare (ignore arg))
  -  (DBG (FORMAT T "CMD-JOIN-LINES: ~%"))
  +  (dbg (format t "CMD-JOIN-LINES: ~%"))
     ;; (.,.+1)j
     ;;         Joins  the  addressed  lines.   The  addressed  lines are
     ;;         deleted from the buffer and replaced  by  a  single  line
     ;;         containing their joined text.  The current address is set
     ;;         to the resultant line.
     (with-addresses (buffer (curr from 1) (last to 1))
  -    (BUFFER-SAVE-UNDO BUFFER)
  +    (buffer-save-undo buffer)
       (setf (buffer-cut-lines buffer) (do-cut buffer curr last))
       (do-paste buffer (1- curr)
                 (apply (function concatenate) 'string
  -                     (buffer-cut-lines buffer))))
  -  ) ;;CMD-JOIN-LINES
  -
  -
  -(DEFUN CMD-MARK (BUFFER FROM TO ARG)
  +                     (buffer-cut-lines buffer)))))
  +
  +
  +(defun cmd-mark (buffer from to arg)
     (declare (ignore from))
  -  (DBG (FORMAT T "CMD-MARK: ~%"))
  +  (dbg (format t "CMD-MARK: ~%"))
     ;; (.)klc  Marks a line with a lower case letter lc.  The  line  can
     ;;         then  be  addressed as 'lc (i.e., a single quote followed
     ;;         by lc ) in subsequent commands.  The mark is not  cleared
     ;;         until the line is deleted or otherwise modified.
     (with-addresses (buffer (curr to 1))
  -    (BUFFER-SET-MARK BUFFER arg curr))
  -  ) ;;CMD-MARK
  -
  -
  -(DEFUN CMD-PRINT-LINE-NUMBER (BUFFER FROM TO ARG)
  +    (buffer-set-mark buffer arg curr)))
  +
  +
  +(defun cmd-print-line-number (buffer from to arg)
     (declare (ignore from arg))
  -  (DBG (FORMAT T "CMD-PRINT-LINE-NUMBER: ~%"))
  +  (dbg (format t "CMD-PRINT-LINE-NUMBER: ~%"))
     ;; ($)=    Prints the line number of the addressed line.
     (with-addresses (buffer (curr to 1))
  -    (format *terminal-io* "~D~%" curr))
  -  ) ;;CMD-PRINT-LINE-NUMBER
  -
  -
  -(DEFUN CMD-SCROLL-LINES (BUFFER FROM TO ARG)
  +    (format *terminal-io* "~D~%" curr)))
  +
  +
  +(defun cmd-scroll-lines (buffer from to arg)
     (declare (ignore from arg))
  -  (DBG (FORMAT T "CMD-SCROLL-LINES: ~%"))
  +  (dbg (format t "CMD-SCROLL-LINES: ~%"))
     ;; (.+1)zn Scrolls n lines at a time starting at addressed line.  If
     ;;         n is not specified, then the current window size is used.
     ;;         The current address is set to the last line printed.
     (with-addresses (buffer (curr to 1))
       ;; TODO: IMPLEMENT SCROLL!
  -    (DO-PRINT-LINES BUFFER curr (buffer-length buffer)
  -                    (LAMBDA (LINUM LINE)
  -                      (DECLARE (IGNORE LINUM))
  -                      (FORMAT *TERMINAL-IO* "~A~%" LINE))) )
  -  ) ;;CMD-SCROLL-LINES
  -
  -
  -(DEFUN CMD-PRINT-LINES (BUFFER FROM TO ARG)
  +    (do-print-lines buffer curr (buffer-length buffer)
  +                    (lambda (linum line)
  +                      (declare (ignore linum))
  +                      (format *terminal-io* "~A~%" line))) ))
  +
  +
  +(defun cmd-print-lines (buffer from to arg)
     (declare (ignore arg))
  -  (DBG (FORMAT T "CMD-PRINT-LINES: ~%"))
  +  (dbg (format t "CMD-PRINT-LINES: ~%"))
     ;;     (.+1)newline
     ;;             Prints the addressed line, and sets the  current  address
     ;;             to that line.
  
positive.code:           ((and (<= 1 (length arg)) (string= "!"  arg :end2 1))
             (values :command (subseq arg 1)))
            (t
             (values :path arg (probe-file arg))))))
    ) ;;file-or-command-arg
  
  
  
  (DEFUN cmd-write-or-append (BUFFER FROM TO ARG mode)
    (with-addresses (buffer (curr from 1) (last to 1))
      (multiple-value-bind (kind path exists) (file-or-command-arg arg)
        (declare (ignore exists))
  
negative.code:    ;;         execution, a `!'  is printed to the standard output.  The
     ;;         current line is unchanged.
     (declare (ignore buffer from to arg))
     (dbg (format t "CMD-toggle-debug: ~%"))
     (toggle *show-debug*)))
  
  
  
  (defun skip-spaces (command &optional (start 0))
    "
  RETURN: The index of the next non white space character in command,
          starting from position, or nil if end of string.
  "
    (do ((start start (1+ start)))
        ((or (>= start (length command))
             (char/= (character " ") (char command start)))
         (when (< start (length command)) start))))
  
  ;;addresses -->   address
  ;;              | address ',' address
  