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 );
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, 0 );
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 | flag_rejections ) );
50 OutCsaShogi( "info ponder end\n" );
54 if ( game_status & mask_game_end )
56 OutCsaShogi( "info ponder end\n" );
57 unmake_move_root( ptree, move );
61 if ( get_elapsed( &time_start ) < 0 ) { return -1; }
63 game_status |= flag_pondering;
65 iret = iterate( ptree, 0 );
66 if ( game_status & flag_thinking )
68 game_status &= ~flag_thinking;
69 if ( iret < 0 ) { return iret; }
71 iret = com_turn_start( ptree, flag_from_ponder );
72 if ( iret < 0 ) { return iret; }
76 OutCsaShogi( "info ponder end\n" );
77 game_status &= ~flag_pondering;
78 unmake_move_root( ptree, move );
86 analyze( tree_t * restrict ptree )
90 if ( game_status & mask_game_end ) { return 1; }
92 iret = get_elapsed( &time_start );
93 if ( iret < 0 ) { return iret; }
95 game_status |= flag_pondering;
96 iret = iterate( ptree, 0 );
97 game_status &= ~flag_pondering;
99 if ( abs(last_root_value) > score_max_eval )
101 MnjOut( "pid=%d confident\n", mnj_posi_id );