// 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; }