;;; 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)