summaryrefslogtreecommitdiff
path: root/chess-session.el
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2002-03-01 06:17:46 +0000
committerJohn Wiegley <johnw@newartisans.com>2002-03-01 06:17:46 +0000
commitf115e4627966ae900aef55cb10f9e6207dbe7adf (patch)
tree0718fd859aa8995889a1d7b7a5dc9007c39767df /chess-session.el
Initial revision
Diffstat (limited to 'chess-session.el')
-rw-r--r--chess-session.el49
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