summaryrefslogtreecommitdiff
path: root/chess-autosave.el
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2002-05-01 00:06:56 +0000
committerJohn Wiegley <johnw@newartisans.com>2002-05-01 00:06:56 +0000
commitf6fcd3b9a85bde4a985094cd48235975a0ba1be5 (patch)
tree954b05339a8431f26a1dc53c29327e22da97cbaf /chess-autosave.el
parent1802057adc2e99bbfe6792ca8c09b39c816d62f3 (diff)
Sped up autosaving by a huge amount; also, allow auto-saving to be
disabled (it's not necessary when playing on ICS, for example).
Diffstat (limited to 'chess-autosave.el')
-rw-r--r--chess-autosave.el39
1 files changed, 31 insertions, 8 deletions
diff --git a/chess-autosave.el b/chess-autosave.el
index 909e315..9ab935c 100644
--- a/chess-autosave.el
+++ b/chess-autosave.el
@@ -40,20 +40,43 @@
((eq event 'post-move)
(chess-autosave-write game chess-autosave-file))
+ ((eq event 'disable-autosave)
+ (chess-autosave-handler game 'destroy)
+ (chess-module-destroy (current-buffer)))
+
((eq event 'destroy)
(if (file-readable-p chess-autosave-file)
(delete-file chess-autosave-file)))))
(defun chess-autosave-write (game file)
"Write a chess GAME to FILE as raw Lisp."
- (let ((game-copy (copy-alist game)))
- (chess-game-set-hooks game-copy nil)
- (chess-game-set-data-alist game-copy nil)
- (with-current-buffer (find-file-noselect file t)
- (erase-buffer)
- (prin1 game-copy (current-buffer))
- (basic-save-buffer)
- (message nil))))
+ (with-current-buffer (find-file-noselect file t)
+ (erase-buffer)
+ (insert "(nil ")
+ (prin1 (chess-game-tags game) (current-buffer))
+ (insert " nil (")
+ (dolist (ply (chess-game-plies game))
+ (insert "([")
+ (let ((pos (chess-ply-pos ply)))
+ (dotimes (i 74)
+ (prin1 (aref pos i) (current-buffer))
+ (unless (= i 73)
+ (insert ? ))))
+ (insert ?\])
+ (let ((changes (chess-ply-changes ply)))
+ (if changes
+ (insert ? ))
+ (while changes
+ (if (eq (car changes) :next-pos)
+ (setq changes (cddr changes))
+ (prin1 (car changes) (current-buffer))
+ (if (cdr changes)
+ (insert ? ))
+ (setq changes (cdr changes)))))
+ (insert ") "))
+ (insert "))")
+ (basic-save-buffer)
+ (message nil)))
(defun chess-autosave-read (file)
"Read a chess game as raw Lisp from FILE."