Cleaned up replay separation stuff a bit.
[mumble.git] / src / mumble.lisp
blob8bfda646e4428dd611f4db9947055c23a84a1ee2
1 (in-package :mumble)
3 (eval-when (:compile-toplevel :load-toplevel :execute)
4 (defvar *replay-map* nil))
6 (defun register-replay (name special-handler channel-creator output-fn)
7 (push (list name special-handler channel-creator output-fn)
8 *replay-map*))
10 (defun set-tune-replay (name tune)
11 (dolist (replay *replay-map*)
12 (when (equal name (car replay))
13 (setf (tune-replay tune) name)))
14 (equal (tune-replay tune) name))
16 (defun replay-output-fn (replay tune file)
17 (do ((list *replay-map* (cdr list)))
18 ((equal replay (caar list)) (funcall (fourth (car list)) tune file))))
20 (defun replay-create-channels (replay)
21 (do ((list *replay-map* (cdr list)))
22 ((equal replay (caar list)) (funcall (third (car list))))))
24 (defun replay-special-handler (replay stream channels)
25 (do ((list *replay-map* (cdr list)))
26 ((equal replay (caar list)) (funcall (second (car list))
27 stream channels))))
30 ;;;; HIGH-LEVEL
32 (defun compile-mumble (in-file out-file)
33 (with-open-file (stream in-file)
34 (let ((tune (parse-mumble-file stream)))
35 (replay-output-fn (tune-replay tune) tune out-file))))