#include #include #include "engine/bitboard.h" #include "engine/moves.h" #include "engine/fen.h" #include "fcntl.h" #include "ipc.c" struct sqrstr { char data[2]; }; struct sqrstr sqr_to_str(int i) { assert(i < 64); return (struct sqrstr) { .data = {(i / 10) + '0', (i % 10) + '0' } }; } int main(void) { while (1) { char* x = read_queue(rx); log_infof("Received: %s", x); moves_t moves = moves_init(); struct fen_load result = load_fen(x); free(x); if (result.failed) { log_warnf("Invalid fen"); send_queue(tx, "Failed", 7); return 0; } log_infof("Valid fen"); position_t position = result.position; get_moves(&moves, position); send_queue(tx, "Sending", 8); char buf[65]; int k = 0; for (int i = 0; i < moves.length; i++) { struct sqrstr from_str = sqr_to_str(moves.moves[i].from); struct sqrstr to_str = sqr_to_str(moves.moves[i].to); buf[k++] = from_str.data[0]; buf[k++] = from_str.data[1]; buf[k++] = to_str.data[0]; buf[k++] = to_str.data[1]; if (k != 64) continue; buf[k] = 0; send_queue(tx, buf, sizeof(buf)); k = 0; } if (k != 0) send_queue(tx, buf, sizeof(buf)); char end_transmission[] = "END-TRANSMISSION"; int n = strlen(end_transmission); log_infof("%s", end_transmission); send_queue(tx, end_transmission, n + 1); } return 0; } #include "engine/bitboard.c" #include "engine/moves.c" #include "engine/fen.c"