7 ponder( tree_t * restrict ptree )
13 if ( ( game_status & ( mask_game_end | flag_noponder | flag_nopeek ) )
14 || abs( last_root_value ) > score_max_eval
15 || ! record_game.moves
16 || sec_limit_up == UINT_MAX ) { return 1; }
18 ponder_nmove = gen_legal_moves( ptree, ponder_move_list, 1 );
20 if ( get_elapsed( &time_start ) < 0 ) { return -1; }
22 Out( "\nSearch a move to ponder\n\n" );
23 OutCsaShogi( "info ponder start\n" );
26 // [HGM] for converting to CSA move during ponder
27 for( iret = 0; iret < nsquare; iret++ ) root_pos[iret] = BOARD[iret];
30 game_status |= flag_puzzling;
31 iret = iterate( ptree );
32 game_status &= ~flag_puzzling;
33 if ( iret < 0 ) { return iret; }
35 if ( game_status & ( flag_quit | flag_quit_ponder | flag_suspend ) )
37 OutCsaShogi( "info ponder end\n" );
41 if ( abs(last_root_value) > score_max_eval )
43 OutCsaShogi( "info ponder end\n" );
47 ponder_move = move = last_pv.a[1];
48 str = str_CSA_move( move );
49 Out( "\nPonder on %c%s (%+.2f)\n\n",
50 ach_turn[root_turn], str, (double)last_root_value / 100.0 );
52 iret = make_move_root( ptree, move, flag_rep );
55 OutCsaShogi( "info ponder end\n" );
59 if ( game_status & mask_game_end )
61 OutCsaShogi( "info ponder end\n" );
62 return unmake_move_root( ptree );
65 if ( get_elapsed( &time_start ) < 0 ) { return -1; }
67 game_status |= flag_pondering;
69 iret = iterate( ptree );
70 if ( game_status & flag_thinking )
72 game_status &= ~flag_thinking;
73 if ( iret < 0 ) { return iret; }
75 iret = com_turn_start( ptree, flag_from_ponder );
76 if ( iret < 0 ) { return iret; }
80 OutCsaShogi( "info ponder end\n" );
81 game_status &= ~flag_pondering;
82 return unmake_move_root( ptree );
86 #if defined(MNJ_LAN) || defined(USI)
88 analyze( tree_t * restrict ptree )
93 if ( game_status & mask_game_end )
95 MnjOut( "pid=%d move=%%TORYO v=%de n=0 final%s\n",
96 mnj_posi_id, -score_bound,
97 ( mnj_depth_stable == INT_MAX ) ? "" : " stable" );
102 iret = get_elapsed( &time_start );
103 if ( iret < 0 ) { return iret; }
105 game_status |= flag_pondering;
106 iret = iterate( ptree );
107 game_status &= ~flag_pondering;
109 if ( abs(last_root_value) > score_max_eval )
111 MnjOut( "pid=%d final%s\n", mnj_posi_id,
112 ( mnj_depth_stable == INT_MAX ) ? "" : " stable" );