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:

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


  1. 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.

  1. reads current position from file named $1 (.epd format)
  2. decides what move to make (as white), using gnuchess
  3. prints out move
  4. 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 : //'

2 Answers 2


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:

>>> board.push_san("e4")
>>> board.push_san("e5")

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


The simplest I can think of is to generate all moves that would end on the destination square then scan the board to find the piece that moved there. The difference is that pawn moves would have to be programmed to correct for the direction, ep, and double move.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.