;;; This is a program to show off all of SLISP wizzy demos.

(defvar demos-loaded? nil
  "T if demo files have already been loaded.")


;;; The list of names of demos to load.  Add here if there are more demos.

(defparameter demo-files '("bball" "hanoi" "qix" "petal" "wow" "woops")
  "The list of demo program names.")

(defparameter demo-home-directory ">lisp3>user>daa>demos>"
  "Where the demos live.")

;;; LOAD-DEMOS is the function to call to load up all of the various demo programs.

(defun load-demos ()
  "Load demo programs if they have not already been loaded."
  (cond ((null demos-loaded?)
	 (dolist (file demo-files)
	   (princ "Loading ") (princ file)
	   (load (concatenate 'simple-string demo-home-directory file ".sfasl"))
	   (terpri))
	 (setq demos-loaded? t))))


;;; The top level caller.  If there are more demos added, add where indicated
;;; in the form  ("<demo name>" :funcall "<top level function name>" (<args>))
;;; If there are no args then leave off the last line.

(defun demo ()
  (menu-choose :items (("bball" :funcall #'bounce-boxes)
			("hanoi" :funcall #'hannoi (6))
			("qix" :funcall #'qix)

		       ;; add here.

			("petal" :funcall #'petal)
			("wow" :funcall #'wow)
			("woops" :funcall #'woops))
		:title "One of.."))

(princ "Enter demos directory [>lisp3>user>daa>demos>]: ")
(let ((dir (read-line)))
  (unless (equal "" dir)
    (setq demo-home-directory dir)))
(load-demos)