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" );
25 game_status |= flag_puzzling;
26 iret = iterate( ptree );
27 game_status &= ~flag_puzzling;
28 if ( iret < 0 ) { return iret; }
30 if ( game_status & ( flag_quit | flag_quit_ponder | flag_suspend ) )
32 OutCsaShogi( "info ponder end\n" );
36 if ( abs(last_root_value) > score_max_eval )
38 OutCsaShogi( "info ponder end\n" );
42 ponder_move = move = last_pv.a[1];
43 str = str_CSA_move( move );
44 Out( "\nPonder on %c%s (%+.2f)\n\n",
45 ach_turn[root_turn], str, (double)last_root_value / 100.0 );
47 iret = make_move_root( ptree, move, flag_rep );
50 OutCsaShogi( "info ponder end\n" );
54 if ( game_status & mask_game_end )
56 OutCsaShogi( "info ponder end\n" );
57 return unmake_move_root( ptree );
60 if ( get_elapsed( &time_start ) < 0 ) { return -1; }
62 game_status |= flag_pondering;
64 iret = iterate( ptree );
65 if ( game_status & flag_thinking )
67 game_status &= ~flag_thinking;
68 if ( iret < 0 ) { return iret; }
70 iret = com_turn_start( ptree, flag_from_ponder );
71 if ( iret < 0 ) { return iret; }
75 OutCsaShogi( "info ponder end\n" );
76 game_status &= ~flag_pondering;
77 return unmake_move_root( ptree );
81 #if defined(MNJ_LAN) || defined(USI)
83 analyze( tree_t * restrict ptree )
88 if ( game_status & mask_game_end )
90 MnjOut( "pid=%d move=%%TORYO v=%de n=0 final%s\n",
91 mnj_posi_id, -score_bound,
92 ( mnj_depth_stable == INT_MAX ) ? "" : " stable" );
97 iret = get_elapsed( &time_start );
98 if ( iret < 0 ) { return iret; }
100 game_status |= flag_pondering;
101 iret = iterate( ptree );
102 game_status &= ~flag_pondering;
104 if ( abs(last_root_value) > score_max_eval )
106 MnjOut( "pid=%d final%s\n", mnj_posi_id,
107 ( mnj_depth_stable == INT_MAX ) ? "" : " stable" );