anchor.diff:              (:closed    (format-ballot-tally ballot))
               (:cancelled ""))))
   
  -;; | list [ballot[s]]                                 | list of ballots        | Lists all known ballots with their state and deadline or results.                        |
  +;; | list [ballot[s]]                                 | list of ballots        | Lists all known ballots with their state and deadline or results.
   (defun list-ballots ()
     (if *ballots*
      (dolist (ballot *ballots*)
        (list-ballot ballot))
      (format t "No ballots yet.  Use the new ballot command.~%")))
   
  -;; | show [ballot] $ballot-id                         | display info of ballot | Displays all the public information about the ballot.                                     |
  +;; | show [ballot] $ballot-id                         | display info of ballot | Displays all the public information about the ballot.
   (defun show-ballot (ballot-id)
     (let ((ballot (find-ballot-id ballot-id)))
       (list-ballot ballot)))
   
   
  -;; | add choice $ballot-id $choice-id $choice-title   |                        | Adds a new choice to the ballot.  Only in :editing state.                                 |
  +;; | add choice $ballot-id $choice-id $choice-title   |                        | Adds a new choice to the ballot.  Only in :editing state.
   (defun add-choice (user-id ballot-id choice-id choice-title)
     (let ((ballot (find-ballot-id ballot-id)))
       (check-ballot-owner ballot user-id)
  
positive.code: (defvar *ballot-file* #P"/usr/local/var/botvot/ballot.sexp"
          "Path of the file where the *ballot* is saved.")
  
  (defvar *ballot-zombie-life* (days 15)
    "Delete closed or cancelled ballots older than that.")
  
  
negative.code:     (apply fun args)))
  
  (defun process-command (words)
    (handler-bind ((error (lambda (err)
                            (print-backtrace)
                            (format *error-output* "~%~A~%" err)
                            (return-from process-command))))
      (unwind-protect
           (multiple-value-bind (matches docstring bindings call)
               (match-command words *commands* :exact t)
             (declare (ignore docstring))
             (if matches
                 (call-command matches call bindings)
                 (answer "Invalid command: ~{~S~^ ~}" words)))
        (garbage-collect-ballots))))
  
  ;;;
  ;;; A little ballot REPL to try out the command processing from the
  ;;; lisp REPL instead of thru a IRC connection: 
  ;;;
  
  (defun ballot-repl ()
    (unwind-protect
  