diff options
| author | John Wiegley <johnw@newartisans.com> | 2002-03-01 06:17:46 +0000 |
|---|---|---|
| committer | John Wiegley <johnw@newartisans.com> | 2002-03-01 06:17:46 +0000 |
| commit | f115e4627966ae900aef55cb10f9e6207dbe7adf (patch) | |
| tree | 0718fd859aa8995889a1d7b7a5dc9007c39767df /chess-session.el | |
Initial revision
Diffstat (limited to 'chess-session.el')
| -rw-r--r-- | chess-session.el | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/chess-session.el b/chess-session.el new file mode 100644 index 0000000..6f0dde4 --- /dev/null +++ b/chess-session.el @@ -0,0 +1,49 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Manage a chess playing/viewing session +;; +;; $Revision$ + +;;; Commentary: + +(defun chess-session-create () + (cons nil nil)) + +(defun chess-session-add-listener (session listener &optional front) + (if (or front (not (cdr session))) + (setcdr session (cons (cons listener nil) + (cdr session))) + (nconc session (list (cons listener nil))))) + +(defun chess-session-remove-listener (session listener) + (setcdr session (delq (assq listener (cdr session)) + (cdr session)))) + +(defun chess-session-data (session sym) + (cdr (assq sym (car session)))) + +(defun chess-session-set-data (session sym value) + (let ((entry (assq sym (car session)))) + (if entry + (setcdr entry value) + (setcar session (cons (cons sym value) + (car session)))))) + +(defun chess-session-del-data (session sym) + (setcar session (delq (assq sym (car session)) + (car session)))) + +(defun chess-session-event (session event &rest args) + (let ((listeners (cdr session)) result) + (while (and (or (eq event 'initialize) + (null result)) listeners) + (setq result (apply (caar listeners) session (cdar listeners) + event args)) + (if (eq event 'initialize) + (setcdr (car listeners) result)) + (setq listeners (cdr listeners))) + result)) + +(provide 'chess-session) + +;;; chess-session.el ends here |
