From 1c1607589eadf378812f1dbfd18b2826cf921db0 Mon Sep 17 00:00:00 2001 From: Mario Lang Date: Mon, 24 Mar 2014 01:58:43 +0100 Subject: (incomplete) support for the stockfish engine. --- chess-uci.el | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 chess-uci.el (limited to 'chess-uci.el') 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 +;; 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 -- cgit v1.2.3