summaryrefslogtreecommitdiff
path: root/chess-engine.el
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2002-04-08 09:43:00 +0000
committerJohn Wiegley <johnw@newartisans.com>2002-04-08 09:43:00 +0000
commitc3b172fa3a37b50d7783cfaee7ce54a7313ec4b4 (patch)
tree1b2793adf595868d0fb351d700c51a89fdcfe415 /chess-engine.el
parent2d57b225aa90786b9fab0baf07ddd808dcf48a52 (diff)
*** no comment ***
Diffstat (limited to 'chess-engine.el')
-rw-r--r--chess-engine.el60
1 files changed, 40 insertions, 20 deletions
diff --git a/chess-engine.el b/chess-engine.el
index 5d80436..be1d3ab 100644
--- a/chess-engine.el
+++ b/chess-engine.el
@@ -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)
@@ -65,12 +69,14 @@
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)
@@ -142,11 +148,23 @@
(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))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
@@ -168,18 +186,20 @@
((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