anchor.diff:              (push dst-file copied-files)))))))
   
   
  +
  +
  +(defun call-with-input-file (path element-type if-does-not-exist external-format thunk)
  +  (let ((if-does-not-exist-action (if (member if-does-not-exist '(:error :create nil))
  +                                      if-does-not-exist
  +                                      nil))
  +        (if-does-not-exist-value  (if (member if-does-not-exist '(:error :create nil))
  +                                      nil
  +                                      if-does-not-exist)))
  +    (with-open-file (in path :direction :input
  +                             :if-does-not-exist if-does-not-exist-action
  +                             :element-type element-type
  +                             :external-format external-format)
  +      (typecase in
  +        (null if-does-not-exist-value)
  +        (stream (funcall thunk in))))))
  +
  +
  +(defmacro with-input-file ((streamvar path element-type if-does-not-exist external-format) &body body)
  +  `(call-with-input-file ,path ,element-type ,if-does-not-exist ,external-format (lambda (,streamvar) ,@body)))
  +
  +
   (defun sexp-file-contents (path &key (if-does-not-exist :error)
  -                           (external-format :default))
  -  "
  -RETURN: The first SEXP of the file at PATH,
  -        or what is specified by IF-DOES-NOT-EXIST if it doesn't exist.
  -"
  -  (with-open-file (in path :direction :input
  -                      :if-does-not-exist if-does-not-exist
  -                      :external-format external-format)
  -    (if (and (streamp in) (not (eq in if-does-not-exist)))
  -        (let ((*read-base* 10.))
  -          (read in nil in))
  -        in)))
  +                                  (external-format :default))
  +  "
  +IF-DOES-NOT-EXIST:  Can be :error, :create, nil, or another value that
  +                    is returned instead of the content of the file if
  +                    it doesn't exist.
  +
  +RETURN:             The first SEXP of the file at PATH, or the value
  +                    of IF-DOES-NOT-EXIST when not :ERROR or :CREATE
  +                    and the file doesn't exist.
  +"
  +  (with-input-file (in path 'character if-does-not-exist external-format)
  +    (let ((*read-base* 10.))
  +      (read in nil in))))
   
   
   (defun (setf sexp-file-contents) (new-contents path
  
positive.code: 
  
  (defun text-file-contents (path &key (if-does-not-exist :error)
                             (external-format :default))
    "
  RETURN: The contents of the file at PATH as a LIST of STRING lines.
          or what is specified by IF-DOES-NOT-EXIST if it doesn't exist.
  "
    (with-open-file (in path :direction :input
                        :if-does-not-exist if-does-not-exist
                        :external-format external-format)
      (if (and (streamp in) (not (eq in if-does-not-exist)))
          (contents-from-stream in :min-size 16384)
          in)))
  
  
  (defun (setf text-file-contents) (new-contents path
  
negative.code: 
  
  (defun string-list-text-file-contents (path &key (if-does-not-exist :error)
                                                (external-format :default))
    "
  IF-DOES-NOT-EXIST:  Can be :error, :create, nil, or another value that
                      is returned instead of the content of the file if
                      it doesn't exist.
  
  RETURN:             The list of lines collected from the file, or the
                      value of IF-DOES-NOT-EXIST when not :ERROR or
                      :CREATE and the file doesn't exist.
  "
    (with-input-file (in path 'character if-does-not-exist external-format)
       (stream-to-string-list in)))
  
  
  (defun (setf string-list-text-file-contents) (new-contents path
  