#include #include #include #include #include #include #include #include "uci/state.h" #include "uci/command.h" #include "uci/response.h" #include "uci.h" #include "ipc.h" void load_from_message(ucicmd* cmd, const char* message) { char token[MAX_TOKEN_SIZE]; int i = 0, k = 0; while (message[i] != 0 && message[i] != '\n' && message[i] != '\r') { if (message[i] != ' ') { token[k++] = message[i++]; continue; } if (k == 0) { i++; continue; } i++; token[k] = 0; ucicmd_add(cmd, token); k = 0; } token[k] = 0; ucicmd_add(cmd, token); } void *uci(void *_com) { comms *com = (comms*)_com; // https://stackoverflow.com/a/41559081 fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); com->state = (uci_state) {0}; strncpy(com->state.name, "Gacrux", 32); strncpy(com->state.author, "Aargh Rai ", 32); int k = 0; com->state.option_settings[k++] = option_setting_spin( "Threads", 1, 5, 1, &com->state.threads ); com->state.option_settings[k++] = option_setting_spin( "Hash", 0, 512, 256, &com->state.hash ); com->state.option_settings[k++] = option_setting_button( "Clear Hash", &com->state.clear_hash ); com->state.option_settings[k++] = option_setting_check( "UCI_ShowCurrLine", false, &com->state.uci_showcurrline ); com->state.option_settings[k++] = option_setting_check( "UCI_ShowRefutations", false, &com->state.uci_showrefutations ); com->state.option_settings[k++] = option_setting_check( "UCI_LimitStrength", false, &com->state.uci_limitstrength ); com->state.option_settings[k++] = option_setting_spin( "UCI_Elo", 100, 3500, 800, &com->state.uci_elo ); com->state.option_settings[k++] = option_setting_check( "UCI_AnalyseMode", false, &com->state.uci_analysemode ); com->state.option_settings[k++] = option_setting_string( "UCI_Opponent", "", &com->state.uci_opponent ); com->state.option_settings[k++] = option_setting_string( "UCI_EngineAbout", "Gacrux by Aargh Rai, Checkout https://git.aarghrai.com/gacrux", &com->state.uci_engineabout ); com->state.option_settings[k++] = option_setting_string( "UCI_SetPositionValue", "", &com->state.uci_setpositionvalue ); atomic_store(&com->uci_state_initialized, 1); ucicmd cmd = ucicmd_init(); size_t n; char buf[1024]; while (true) { cmd.empty = true; cmd.args_count = 0; ssize_t n = read(STDIN_FILENO, buf, sizeof(buf)); if (n > 0) { load_from_message(&cmd, buf); } handle_uci( &com->state, com->engine_messages, cmd ); } } #include "uci/command.c" #include "uci/response.c" #include "uci/state.c"