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 (let ((replay (list name special-handler channel-creator output-fn
)))
8 (aif (position name
*replay-map
* :test
#'equal
:key
#'car
)
9 (setf (nth it
*replay-map
*) replay
)
10 (push replay
*replay-map
*))))
12 (defun set-tune-replay (name tune
)
13 (dolist (replay *replay-map
*)
14 (when (equal name
(car replay
))
15 (setf (tune-replay tune
) name
)))
16 (equal (tune-replay tune
) name
))
18 (defun replay-output-fn (replay tune file
)
19 (do ((list *replay-map
* (cdr list
)))
20 ((equal replay
(caar list
)) (funcall (fourth (car list
)) tune file
))))
22 (defun replay-create-channels (replay)
23 (do ((list *replay-map
* (cdr list
)))
24 ((equal replay
(caar list
)) (funcall (third (car list
))))))
26 (defun replay-special-handler (replay stream channels
)
27 (do ((list *replay-map
* (cdr list
)))
28 ((equal replay
(caar list
)) (funcall (second (car list
))
34 (defun compile-mumble (in-file out-file
)
35 (with-open-file (stream in-file
)
36 (let ((tune (parse-mumble-file stream
)))
37 (replay-output-fn (tune-replay tune
) tune out-file
))))