diff --git a/src/bodichess.c b/src/bodichess.c index 8f7820f..1033046 100644 --- a/src/bodichess.c +++ b/src/bodichess.c @@ -53,6 +53,7 @@ int do_fen(pos_t *, char*); int do_pos(pos_t *, char*); int do_genmoves(pos_t *, char*); int do_prmoves(pos_t *, char*); +int do_prmovepos(pos_t *pos, char *arg); int do_memstats(pos_t *, char*); int do_eval(pos_t *, char*); int do_quit(pos_t *, char*); @@ -65,7 +66,8 @@ COMMAND commands[] = { { "pos", do_pos, "Print current position" }, { "quit", do_quit, "Quit" }, { "genmove", do_genmoves, "Generate next move list" }, - { "prmoves", do_prmoves, "Generate next move list" }, + { "prmoves", do_prmoves, "Print position move list" }, + { "prmovepos", do_prmovepos, "Print Nth move resulting position" }, { "memstats", do_memstats, "Generate next move list" }, { "eval", do_eval, "Eval current position" }, { "debug", do_debug, "Set log level to LEVEL" }, @@ -288,6 +290,22 @@ int do_prmoves(pos_t *pos, return 1; } +int do_prmovepos(pos_t *pos, char *arg) +{ + struct list_head *p_cur, *tmp; + int movenum = atoi(arg), cur = 0; /* starts with 0 */ + move_t *move; + + log_f(1, "%s\n", arg); + list_for_each_safe(p_cur, tmp, &pos->moves) { + move = list_entry(p_cur, move_t, list); + if (cur++ == movenum) + break; + } + pos_print(move->newpos); + return 1; +} + int do_memstats(__attribute__((unused)) pos_t *pos, __attribute__((unused)) char *arg) {