diff options
| author | Aargh Rai <aargh.rai+git@gmail.com> | 2026-07-10 16:01:57 +0530 |
|---|---|---|
| committer | Aargh Rai <aargh.rai+git@gmail.com> | 2026-07-10 16:01:57 +0530 |
| commit | a14da2fe3864712dab4e7c4cfb5c323026d668de (patch) | |
| tree | 418c8c8ff44a611cbe1c1269b10926527046e232 /include/uci | |
| parent | 2761f8a533e2b025f209222a1e4ec70b91c7e8ee (diff) | |
moving header files to include directory & moving resources in it's own directory
i know currently there is race condition, but the code is getting too
messy, i will continue to this after i make a vis tool to analyse how i
should split up files & stuff
the code rn needs intense restructing for it to make any more progress
Diffstat (limited to 'include/uci')
| -rw-r--r-- | include/uci/command.h | 21 | ||||
| -rw-r--r-- | include/uci/response.h | 24 | ||||
| -rw-r--r-- | include/uci/state.h | 122 |
3 files changed, 167 insertions, 0 deletions
diff --git a/include/uci/command.h b/include/uci/command.h new file mode 100644 index 0000000..ba9c51d --- /dev/null +++ b/include/uci/command.h @@ -0,0 +1,21 @@ +#ifndef UCI_COMMAND_H +#define UCI_COMMAND_H + +#define MAX_TOKEN_SIZE 32 + +typedef struct { + char root[MAX_TOKEN_SIZE]; + int args_count; + int args_capacity; + char* args; + bool empty; +} ucicmd; + +ucicmd ucicmd_init(); +void ucicmd_add(ucicmd* cmd, const char* token); +void ucicmd_set_root(ucicmd* cmd, const char* token); +void ucicmd_append_arg(ucicmd* cmd, const char* token); +char* ucicmd_get_arg(ucicmd cmd, int i); +void ucicmd_deinit(ucicmd cmd); + +#endif // UCI_COMMAND_H diff --git a/include/uci/response.h b/include/uci/response.h new file mode 100644 index 0000000..320b1f0 --- /dev/null +++ b/include/uci/response.h @@ -0,0 +1,24 @@ +#ifndef RESPONSE_H +#define RESPONSE_H + +#include "command.h" +#include "state.h" +#include "../ipc.h" + +void handle_uci( + uci_state *state, + engine_messages* engine_message, + ucicmd cmd +); +void handle_initial(uci_state *state, ucicmd cmd); +void handle_idle(uci_state *state, ucicmd cmd); +void handle_sync(uci_state *state, ucicmd cmd); +void handle_ping(uci_state *state, ucicmd cmd); +void handle_active( + uci_state *state, + engine_messages* engine_message, + ucicmd cmd +); +void handle_halt(uci_state *state, ucicmd cmd); + +#endif // RESPONSE_H diff --git a/include/uci/state.h b/include/uci/state.h new file mode 100644 index 0000000..a1df891 --- /dev/null +++ b/include/uci/state.h @@ -0,0 +1,122 @@ +#ifndef UCI_STATE_H +#define UCI_STATE_H + +#include <stdatomic.h> +#include "../fen.h" + +typedef struct { + char* data; + int length; +} str_t; + +typedef bool check_t; +typedef int spin_t; +typedef int combo_t; +// the button isn't actually a value thing +// it's more like an event. +// so we parse a button type, we set this to true, handle it +// then set it to false again +typedef bool button_t; + +typedef struct { + char** combination; + int count; + int default_index; +} option_combo_setting_t; +typedef struct { + int min; + int max; + int default_value; +} option_spin_setting_t; +enum { OPTION_SPIN, OPTION_COMBO, OPTION_CHECK, OPTION_STRING, OPTION_BUTTON }; +typedef struct { + char option_name[32]; + int type; + union { + option_combo_setting_t combo; + option_spin_setting_t spin; + bool check_default; + const char* string_default; + } data; + union { + combo_t *combo; + spin_t *spin; + check_t *check; + str_t *string; + button_t *button; + } value; +} option_setting_t; + +option_setting_t option_setting_combo( + char* option_name, + char** combinations, + int combinations_count, + int default_index, + combo_t *combo +); +option_setting_t option_setting_spin( + const char* option_name, + int min, + int max, + int default_value, + spin_t *spin +); +option_setting_t option_setting_check( + const char* option_name, + bool default_value, + check_t *check +); +option_setting_t option_setting_string( + const char* option_name, + const char* default_value, + str_t *string +); +option_setting_t option_setting_button( + const char* option_name, + button_t *button +); + +typedef struct { + char name[32]; + char author[32]; + bool debug; + + atomic_int go; + atomic_int go_ready_receive; + atomic_int quit; + atomic_int stop; + atomic_int cleanup; + + void* go_args; // TODO: fix the information flow so i don't need to do this trick + position_t position; + struct uci_move *moves; + int moves_count; + + option_setting_t option_settings[11]; + + // options + spin_t threads; + spin_t hash; + button_t clear_hash; + // str_t nalimovpath; + // spin_t nalimovcache; + // check_t ponder; + // check_t ownbook; + // spin_t multipv; + check_t uci_showcurrline; + check_t uci_showrefutations; + check_t uci_limitstrength; + spin_t uci_elo; + check_t uci_analysemode; + str_t uci_opponent; + str_t uci_engineabout; + // str_t uci_shredderbasespath; + str_t uci_setpositionvalue; +} uci_state; + +struct uci_move { + int from; + int to; +}; + +#endif // UCI_STATE_H |
