aboutsummaryrefslogtreecommitdiff
path: root/ui/daemon
diff options
context:
space:
mode:
Diffstat (limited to 'ui/daemon')
-rw-r--r--ui/daemon/ui.c57
-rw-r--r--ui/daemon/vars.py3
2 files changed, 60 insertions, 0 deletions
diff --git a/ui/daemon/ui.c b/ui/daemon/ui.c
new file mode 100644
index 0000000..2417788
--- /dev/null
+++ b/ui/daemon/ui.c
@@ -0,0 +1,57 @@
+#include <signal.h>
+
+bool g_running;
+uint64_t g_step_block;
+
+void sig_handler(int signo) {
+ (void)signo;
+
+ if (g_running) {
+ log_warn("Signal received, will stop simulator soon...");
+ g_running = false;
+ }
+}
+
+void step_block(void) {
+ 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;
+ }
+
+ float secs = (float)(end - beg) / (float)CLOCKS_PER_SEC;
+ float steps_per_sec = (float)g_step_block / secs;
+
+ log_info("Simulator running on step %#lx @%#lxf steps/s", g_steps, (int)steps_per_sec);
+}
+
+int main(void) {
+ g_running = true;
+ g_step_block = 1;
+
+ signal(SIGINT, sig_handler);
+ signal(SIGTERM, sig_handler);
+
+#if defined(COMMAND_NEW)
+ salis_init();
+#elif defined(COMMAND_LOAD)
+ salis_load();
+#endif
+
+ while (g_running) {
+ step_block();
+ }
+
+ log_info("Saving simulation...");
+ salis_save(SIM_PATH);
+ salis_free();
+
+ log_info("Exiting salis...");
+ return 0;
+}
diff --git a/ui/daemon/vars.py b/ui/daemon/vars.py
new file mode 100644
index 0000000..9c2a9f3
--- /dev/null
+++ b/ui/daemon/vars.py
@@ -0,0 +1,3 @@
+flags = set()
+defines = set()
+links = set()