From 0075d1b10c475d303a314a3425ee472252855f32 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Wed, 19 Nov 2025 04:42:58 +0100 Subject: Python/SQLite refactor - Uses Python/Jinja2 to preprocess C files - Uses SQLite3 for data compression --- ui/daemon/ui.j2.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 ui/daemon/ui.j2.c (limited to 'ui/daemon/ui.j2.c') diff --git a/ui/daemon/ui.j2.c b/ui/daemon/ui.j2.c new file mode 100644 index 0000000..7d92f9d --- /dev/null +++ b/ui/daemon/ui.j2.c @@ -0,0 +1,60 @@ +// Author: Paul Oliver +// Project: Salis + +// Lightweight UI for the Salis simulator with minimal output. +// Can be interrupted through OS signals. +// Ideal for running Salis in the background. + +volatile bool g_running; +uint64_t g_step_block; + +void sig_handler(int signo) { + switch (signo) { + case SIGINT: + case SIGTERM: + printf("Signal received, will stop simulator soon...\n"); + g_running = false; + break; + } +} + +void step_block() { + clock_t beg = clock(); + salis_step(g_step_block - (g_steps % g_step_block)); + clock_t end = clock(); + + if ((end - beg) < (CLOCKS_PER_SEC * 4)) { + g_step_block <<= 1; + } + + if ((end - beg) >= (CLOCKS_PER_SEC * 2) && g_step_block != 1) { + g_step_block >>= 1; + } + + printf("Simulator running on step '%#lx'\n", g_steps); +} + +int main() { + {% if args.command == "new" %} + salis_init(); + {% elif args.command == "load" %} + salis_load(); + {% endif %} + + g_running = true; + g_step_block = 1; + + signal(SIGINT, sig_handler); + signal(SIGTERM, sig_handler); + + while (g_running) { + step_block(); + } + + printf("Saving simulation...\n"); + salis_save("{{ sim_path }}"); + salis_free(); + + printf("Exiting salis...\n"); + return 0; +} -- cgit v1.2.1