Coordinate-style move output from chess engine, to control robot I'm using gnuchess to decide which move a program should make, and I'm using its output to control a robot arm (to execute the move on a real board).

However, gnuchess outputs SAN (Standard Algebraic Notation), such as "Nf3". To control the robot arm, it would be much more helpful to have a coordinate-based notation, such as "g1-f3".

My question is:


Is there a way to get gnuchess to output coordinate-based notation? I know it can accept such notation as input (human-supplied move).


-or-


Is there existing software (or detailed algorithm) that takes
 (a) a SAN move
 (b) a .eps board
and produces:
 (c) a coordinate-based move?


I use Linux, and here is how I get gnuchess to make its (SAN) move recommendation:

Use gnuchess to decide on next move.


reads current position from file named $1 (.epd format)
decides what move to make (as white), using gnuchess
prints out move
also stores resulting board in dgt.chess.nextpos (.epd format)

rm -f dgt.chess.nextpos

printf "solveepd $1\nepdsave dgt.chess.nextpos\nquit\n" |\
gnuchess |\
grep -a 'My move is' |\
sed 's/My move is : //'
I don't know how you would do that in gnuchess, but you could do little programming yourself in Python. This Python package would do that for you. It's main page has what you want:

&gt;&gt;&gt; board.push_san("e4")
Move.from_uci('e2e4')
&gt;&gt;&gt; board.push_san("e5")
Move.from_uci('e7e5')


You have the move string and chess board. It shouldn't be hard for you.