aboutsummaryrefslogtreecommitdiff
path: root/ui/daemon/ui.c
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2026-02-24 01:33:45 +0100
committerPaul Oliver <contact@pauloliver.dev>2026-02-24 01:33:45 +0100
commit9f7e70904e6c0fa650323ac5e50ebf6003da333c (patch)
tree3015be498d36e8d5c960cf55667c6c825f7de493 /ui/daemon/ui.c
parent0fb1497a62332e0db45f94b4f195cb37183678cb (diff)
Removes usage of Jinja templates
Use CPP to pre-process C files instead
Diffstat (limited to 'ui/daemon/ui.c')
-rw-r--r--ui/daemon/ui.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/ui/daemon/ui.c b/ui/daemon/ui.c
new file mode 100644
index 0000000..1f6c35c
--- /dev/null
+++ b/ui/daemon/ui.c
@@ -0,0 +1,79 @@
+volatile bool g_running;
+uint64_t g_step_block;
+
+void info_impl(const char *restrict fmt, ...) {
+ assert(fmt);
+ printf("\033[1;34m[INFO]\033[0m ");
+
+ va_list args;
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ va_end(args);
+
+ printf("\n");
+}
+
+void warn_impl(const char *restrict fmt, ...) {
+ assert(fmt);
+ printf("\033[1;33m[WARN]\033[0m ");
+
+ va_list args;
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ va_end(args);
+
+ printf("\n");
+}
+
+void sig_handler(int signo) {
+ (void)signo;
+
+ if (g_running) {
+ g_warn("Signal received, will stop simulator soon...");
+ g_running = false;
+ }
+}
+
+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;
+ }
+
+ g_info("Simulator running on step '%#lx'", g_steps);
+}
+
+int main() {
+ g_info = info_impl;
+ g_warn = warn_impl;
+
+#if defined(COMMAND_NEW)
+ salis_init();
+#elif defined(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();
+ }
+
+ g_info("Saving simulation...");
+ salis_save(SIM_PATH);
+ salis_free();
+
+ g_info("Exiting salis...");
+ return 0;
+}