X-Git-Url: http://winboard.nl/cgi-bin?p=bonanza.git;a=blobdiff_plain;f=problem.c;h=dda22e4f6e6a3bb5813232d63912c087ceb9df54;hp=4980e9a1413afdde62c9c6403861cdb05f708757;hb=cygwin;hpb=18b507e1b20fc6c32ee50f00fb910a59110c1a1d diff --git a/problem.c b/problem.c index 4980e9a..dda22e4 100644 --- a/problem.c +++ b/problem.c @@ -1,6 +1,8 @@ +#include +#include #include "shogi.h" -int +int CONV solve_problems( tree_t * restrict ptree, unsigned int nposition ) { const char *str_move; @@ -15,8 +17,7 @@ solve_problems( tree_t * restrict ptree, unsigned int nposition ) for ( uposition = 0; uposition < nposition; uposition++ ) { istatus = in_CSA( ptree, &record_problems, NULL, - ( flag_nomake_move | flag_detect_hang - | flag_rejections ) ); + ( flag_nomake_move | flag_detect_hang ) ); if ( istatus < 0 ) { return istatus; } if ( istatus > record_next ) @@ -70,7 +71,7 @@ solve_problems( tree_t * restrict ptree, unsigned int nposition ) game_status_save = game_status; game_status |= flag_problem | flag_nopeek | flag_thinking; - iresult = iterate( ptree, 0 ); + iresult = iterate( ptree ); game_status = game_status_save; if ( iresult < 0 ) { return iresult; } @@ -100,3 +101,52 @@ solve_problems( tree_t * restrict ptree, unsigned int nposition ) return 1; } + + +#if defined(DFPN) +int CONV +solve_mate_problems( tree_t * restrict ptree, unsigned int nposition ) +{ + unsigned int uposition; + int iret; + + for ( uposition = 0; uposition < nposition; uposition++ ) + { + int imove, istatus; + unsigned int record_move; + + for ( imove = 0; ; imove++ ) + { + istatus = in_CSA( ptree, &record_problems, &record_move, + ( flag_nomake_move | flag_detect_hang + | flag_nofmargin ) ); + if ( istatus < 0 ) + { + str_error = str_illegal_move; + return -1; + } + + if ( istatus >= record_eof ) { break; } + + iret = make_move_root( ptree, record_move, 0 ); + if ( iret < 0 ) { return iret; } + } + + Out( "Problem #%d %s\n", + uposition, ptree->nsuc_check[1] ? "(in check)" : "" ); + + iret = dfpn( ptree, root_turn, 1 ); + if ( iret < 0 ) { return iret; } + + if ( istatus == record_eof ) { break; } + if ( istatus == record_misc ) + { + iret = record_wind( &record_problems ); + if ( iret < 0 ) { return iret; } + if ( iret == record_eof ) { break; } + } + } + + return 1; +} +#endif