From 2761f8a533e2b025f209222a1e4ec70b91c7e8ee Mon Sep 17 00:00:00 2001 From: Aargh Rai Date: Tue, 7 Jul 2026 23:37:41 +0530 Subject: thread spawning from the uci settings & best move & ponder is now sent uci setup is ALMOST done, i can sense it --- src/uci/response.c | 49 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 9 deletions(-) (limited to 'src/uci/response.c') diff --git a/src/uci/response.c b/src/uci/response.c index dbf4614..6208a54 100644 --- a/src/uci/response.c +++ b/src/uci/response.c @@ -154,10 +154,22 @@ void handle_idle( int k = 0; char* mode = ucicmd_get_arg(cmd, 0); if (strcmp(mode, "startpos") == 0) { - state->position = load_fen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"); + struct fen_load fen = load_fen( + "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" + ); + if (fen.failed) { + printf("info invalid fen\n"); + return; + } + state->position = fen.position; } else if (strcmp(mode, "fen") == 0) { - state->position = load_fen(ucicmd_get_arg(cmd, k++)); + struct fen_load fen = load_fen(ucicmd_get_arg(cmd, k++)); + if (fen.failed) { + printf("info invalid fen\n"); + return; + } + state->position = fen.position; } else { assert(0); } if (cmd.args_count >= k) return; @@ -185,7 +197,6 @@ void handle_idle( (move[2] - 'a') * 8 + (move[3] - '1') }; } - state->go = 1; } else if (strcmp(cmd.root, "stop") == 0) { } else if (strcmp(cmd.root, "quit") == 0) { free(cmd.args); @@ -197,10 +208,11 @@ void handle_idle( free(setting.value.string->data); } - exit(0); + atomic_store(&state->quit, 1); } else if (strcmp(cmd.root, "isready") == 0) { current_state = STATE_SYNC; } else if (strcmp(cmd.root, "go") == 0) { + atomic_store(&state->go, 1); current_state = STATE_ACTIVE; } else { printf("info violation\n"); @@ -238,7 +250,6 @@ void handle_active( for (int i = 0; i < engine_messages->count; i++) { struct engine_message *old = engine_messages->data[i]; if (!old->ready) continue; - printf("INITIALIZED\n"); old->ready = 0; printf( @@ -265,10 +276,30 @@ void handle_active( ); } printf("\n"); - // // info depth 1 seldepth 1 multipv 1 score cp 18 nodes 20 nps 4000 hashfull 0 tbhits 0 time 5 pv e2e4 - // - // engine_messages->data[i] = old->next; - // free(old); + + if (old->best_move.from != 0 && old->best_move.to != 0) { + printf( + "bestmove %c%c%c%c", + (old->best_move.from / 8) + 'a', + (old->best_move.from % 8) + '1', + (old->best_move.to / 8) + 'a', + (old->best_move.to % 8) + '1' + ); + if (old->ponder.from != 0 && old->ponder.to != 0) { + printf( + " ponder %c%c%c%c", + (old->ponder.from / 8) + 'a', + (old->ponder.from % 8) + '1', + (old->ponder.to / 8) + 'a', + (old->ponder.to % 8) + '1' + ); + } + printf("\n"); + } + + engine_messages->data[i] = old->next; + free(old->pv.moves); + free(old); } // TODO: this section will call the engine to analysis if (cmd.empty) { -- cgit v1.2.3