anchor.diff:    (quit))
   
   
  -
  +#-testing
   (eval-when (:load-toplevel :execute)
     (save-program-and-quit :name "what-implementation"
                            :toplevel (function main)
  
positive.code:                      (format *query-io* "Enter a menu index or a list of menu indices: ")
                       (finish-output *query-io*)
                       (return
                         (let ((answer (process-answer-line (read-line *query-io*))))
                          (if (eql 0 answer)
                              choices
                              (delete nil
  
negative.code:   #+ecl                  (ext:quit status)
    #+sbcl                 (sb-ext:quit status)
    #-(or ccl clisp cmu ecl sbcl) (throw 'quit))
  
  
  (defun getenv (var)
    #+ccl           (ccl::getenv var)
    #+clisp         (ext:getenv var)
    #+CMU           (cdr (assoc var ext:*environment-list* :test #'string=))
    #+ecl           (ext:getenv var)
    #+SBCL          (sb-ext:posix-getenv var)
    #+Allegro       (sys:getenv var)
    #+Lispworks     (lispworks:environment-variable var)
    #-(or ccl
          clisp
          cmu
          ecl
          sbcl
          allegro
          lispworks) (iolib.syscalls:getenv var))
  
  
  (defun prefixp (prefix string &key (start 0) (end nil) (test (function char=)))
    "
  PREFIX:  A sequence.
  STRING:  A sequence.
  START:   The start of the substring of STRING to consider. Default: 0.
  END:     The end   of the substring of STRING to consider. Default: NIL.
  TEST:    A function to compare the elements of the strings.
  RETURN:  Whether PREFIX is a prefix of the (substring STRING START END).
  "
    (let ((mis (mismatch prefix string :start2 start :end2 end :test test)))
      (or (null mis) (<= (length prefix) mis))))
  
  
  
  