A few updates to support latest YMamoto.
[mumble.git] / src / mumble.lisp
blob7a1796f69f4f509d840cb3990ba29602a288c42d
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 (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))
29 stream channels))))
32 ;;;; HIGH-LEVEL
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))))