summaryrefslogtreecommitdiff
path: root/chess-fruit.el
diff options
context:
space:
mode:
authorMario Lang <mlang@delysid.org>2014-03-24 10:08:02 +0100
committerMario Lang <mlang@delysid.org>2014-03-24 10:08:02 +0100
commit5a2cd0a0a96e38fd440055c2672b8a8ed0cc2b92 (patch)
tree8c5d75ecdd54a587ed11935a2225ad5fd6814714 /chess-fruit.el
parent0e811560c1a7f374ea1eccb878b0b64adf54675d (diff)
More UCI engines: fruit and glaurung.
Diffstat (limited to 'chess-fruit.el')
-rw-r--r--chess-fruit.el68
1 files changed, 68 insertions, 0 deletions
diff --git a/chess-fruit.el b/chess-fruit.el
new file mode 100644
index 0000000..1067470
--- /dev/null
+++ b/chess-fruit.el
@@ -0,0 +1,68 @@
+;;; chess-fruit.el --- Play against fruit!
+
+;; Copyright (C) 2014 Free Software Foundation, Inc.
+
+;; Author: Mario Lang <mlang@delysid.org>
+;; Keywords: games
+
+;; This file is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Code:
+
+(require 'chess-uci)
+
+(defgroup chess-fruit nil
+ "The publically available chess engine 'fruit'."
+ :group 'chess-engine
+ :link '(url-link "http://www.fruitchess.com/"))
+
+(defcustom chess-fruit-path (executable-find "fruit")
+ "*The path to the fruit executable."
+ :type 'file
+ :group 'chess-fruit)
+
+(defvar chess-fruit-regexp-alist
+ (list
+ (cons (concat "^bestmove\\s-+\\(" chess-algebraic-regexp "\\)")
+ (function
+ (lambda ()
+ (funcall chess-engine-response-handler 'move
+ (chess-engine-convert-algebraic (match-string 1) t)))))
+ (cons "^id\\s-+name\\s-+\\(.+\\)$"
+ (function
+ (lambda ()
+ (setq-local chess-engine-opponent-name (match-string 1)))))))
+
+(defun chess-fruit-handler (game event &rest args)
+ (unless chess-engine-handling-event
+ (cond
+ ((eq event 'initialize)
+ (let ((proc (chess-uci-handler game 'initialize "fruit")))
+ (when (and proc (processp proc) (eq (process-status proc) 'run))
+ (process-send-string proc "uci\n")
+ (setq chess-engine-process proc)
+ t)))
+
+ (t
+ (if (and (eq event 'undo)
+ (= 1 (mod (car args) 2)))
+ (error "Cannot undo until after fruit moves"))
+
+ (apply 'chess-uci-handler game event args)))))
+
+(provide 'chess-fruit)
+
+;;; chess-fruit.el ends here