diff options
| author | Mario Lang <mlang@delysid.org> | 2014-03-24 01:58:43 +0100 |
|---|---|---|
| committer | Mario Lang <mlang@delysid.org> | 2014-03-24 01:58:43 +0100 |
| commit | 1c1607589eadf378812f1dbfd18b2826cf921db0 (patch) | |
| tree | d567d220af14740e596114378ce36c22a79ec61a /chess-uci.el | |
| parent | 69b3e6329652da55900ca40f5e72f12138c6330e (diff) | |
(incomplete) support for the stockfish engine.
Diffstat (limited to 'chess-uci.el')
| -rw-r--r-- | chess-uci.el | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/chess-uci.el b/chess-uci.el new file mode 100644 index 0000000..befdaaa --- /dev/null +++ b/chess-uci.el @@ -0,0 +1,62 @@ +;;; chess-uci.el --- Universal chess interface protocol for emacs-chess + +;; 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-common) + +(defvar chess-uci-move-regexp "[a-h][1-8][a-h][1-8][nbrq]?" + "A regular expression matching a UCI move.") + +(defun chess-uci-position (game) + (concat "position fen " (chess-pos-to-fen (chess-game-pos game 0) t) + " moves " (mapconcat (lambda (ply) + (let ((source (chess-ply-source ply)) + (target (chess-ply-target ply))) + (if (and source target) + (concat (chess-index-to-coord source) + (chess-index-to-coord target) + (if (chess-ply-keyword ply :promote) + (string (downcase (chess-ply-keyword ply :promote))) + "")) + ""))) + (chess-game-plies game) " ") + "\n")) + +(defun chess-uci-handler (game event &rest args) + (unless chess-engine-handling-event + (cond + ((eq event 'move) + (when (= 1 (chess-game-index game)) + (chess-game-set-tag game "White" chess-full-name) + (chess-game-set-tag game "Black" chess-engine-opponent-name)) + + (chess-engine-send nil (concat (chess-uci-position game) "go\n")) + (if (chess-game-over-p game) + (chess-game-set-data game 'active nil))) + + (t + (apply 'chess-common-handler game event args))))) + +(provide 'chess-uci) + +;;; chess-uci.el ends here |
