diff options
| author | John Wiegley <johnw@newartisans.com> | 2002-04-08 09:43:00 +0000 |
|---|---|---|
| committer | John Wiegley <johnw@newartisans.com> | 2002-04-08 09:43:00 +0000 |
| commit | c3b172fa3a37b50d7783cfaee7ce54a7313ec4b4 (patch) | |
| tree | 1b2793adf595868d0fb351d700c51a89fdcfe415 /chess-engine.el | |
| parent | 2d57b225aa90786b9fab0baf07ddd808dcf48a52 (diff) | |
*** no comment ***
Diffstat (limited to 'chess-engine.el')
| -rw-r--r-- | chess-engine.el | 60 |
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 |
