]> code.delx.au - gnu-emacs-elpa/commitdiff
*** no comment ***
authorJohn Wiegley <johnw@newartisans.com>
Mon, 8 Apr 2002 09:43:00 +0000 (09:43 +0000)
committerJohn Wiegley <johnw@newartisans.com>
Mon, 8 Apr 2002 09:43:00 +0000 (09:43 +0000)
TODO
chess-engine.el

diff --git a/TODO b/TODO
index e0313d564aa6573adf3fc7253a5b9e4e79542944..14b2d2621f50d4d0f44f94d6d405372d5996266d 100644 (file)
--- a/TODO
+++ b/TODO
@@ -25,6 +25,9 @@
 - Auto-raise the chess-images frame, if it's being displayed as a
   separate frame.
 
+- Create a to-text rendering interface for all chess game objects.
+  So, chess-game-to-string would use PGN, etc.
+
 ----------------------------------------------------------------------
 
 - Port image display code to XEmacs
index 5d80436391b47c4f0d8d08a7f7e4db56415a5cf3..be1d3abf9ac8e422a4c3f6610b4b27fc01d53cda 100644 (file)
@@ -1,6 +1,6 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
-;; Obtain movements and other information from a subprocess
+;; Obtain movements and other information from an engine
 ;;
 ;; $Revision$
 
@@ -9,18 +9,22 @@
 (require 'chess-game)
 
 (defgroup chess-engine nil
-  "Code for reading movements and other commands from a subprocess."
+  "Code for reading movements and other commands from an engine."
   :group 'chess)
 
 (defvar chess-engine-regexp-alist nil)
 (defvar chess-engine-event-handler nil)
 (defvar chess-engine-response-handler nil)
+(defvar chess-engine-internal-object nil)
+(defvar chess-engine-current-marker nil)
 (defvar chess-engine-position nil)
 (defvar chess-engine-game nil)
 
 (make-variable-buffer-local 'chess-engine-regexp-alist)
 (make-variable-buffer-local 'chess-engine-event-handler)
 (make-variable-buffer-local 'chess-engine-response-handler)
+(make-variable-buffer-local 'chess-engine-internal-object)
+(make-variable-buffer-local 'chess-engine-current-marker)
 (make-variable-buffer-local 'chess-engine-position)
 (make-variable-buffer-local 'chess-engine-game)
 
            chess-engine-event-handler handler
            chess-engine-response-handler (or 'chess-engine-default-handler
                                              user-handler))
-      (let ((proc (funcall handler 'initialize)))
-       (unless (and proc (memq (process-status proc) '(run open)))
-         (error "Failed to start chess engine process"))
-       (set-process-buffer proc (current-buffer))
-       (set-process-filter proc 'chess-engine-filter)
-       (set-marker (process-mark proc) (point)))
+      (let ((object (funcall handler 'initialize)))
+       (when (processp object)
+         (unless (memq (process-status object) '(run open))
+           (error "Failed to start chess engine process"))
+         (set-process-buffer object (current-buffer))
+         (set-process-filter object 'chess-engine-filter))
+       (setq chess-engine-current-marker (point-marker)
+             chess-engine-internal-object object))
       (current-buffer))))
 
 (defun chess-engine-destroy (engine)
     (chess-engine-command engine 'pass)))
 
 (defun chess-engine-send (engine string)
+  "Send the given STRING to ENGINE."
   (chess-with-current-buffer engine
-    (let ((proc (get-buffer-process (current-buffer))))
-      (if (and proc (memq (process-status proc) '(run open)))
-         (process-send-string proc string)
-       (error "The engine you were using is no longer running")))))
+    (let ((object chess-engine-internal-object))
+      (if (and (processp object))
+         (if (memq (process-status object) '(run open))
+             (process-send-string object string)
+           (error "The engine you were using is no longer running"))
+       (chess-engine-command nil 'send string)))))
+
+(defun chess-engine-submit (engine string)
+  "Submit the given STRING, so ENGINE sees it in its input stream."
+  (chess-with-current-buffer engine
+    (let ((object chess-engine-internal-object))
+      (if (and (processp object)
+              (not (memq (process-status object) '(run open))))
+         (error "The engine you were using is no longer running"))
+      (chess-engine-filter object string))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
      ((eq event 'pass)
       (chess-engine-pass engine)))))
 
-(defun chess-engine-filter (proc string)
-  "Process filter for receiving text from a chess process."
-  (let ((buf (process-buffer proc)))
+(defun chess-engine-filter (object string)
+  "Filter for receiving text for an engine from an outside source."
+  (let ((buf (if (processp object)
+                (process-buffer object)
+              (current-buffer))))
     (when (buffer-live-p buf)
       (with-current-buffer buf
-       (let ((moving (= (point) (process-mark proc))))
+       (let ((moving (= (point) chess-engine-current-marker)))
          (save-excursion
-           ;; Insert the text, advancing the process marker.
-           (goto-char (process-mark proc))
+           ;; Insert the text, advancing the marker.
+           (goto-char chess-engine-current-marker)
            (insert string)
-           (set-marker (process-mark proc) (point)))
-         (if moving (goto-char (process-mark proc))))
+           (set-marker chess-engine-current-marker (point)))
+         (if moving (goto-char chess-engine-current-marker)))
        (unless chess-engine-working
          (setq chess-engine-working t)
          (unwind-protect