summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2016-03-30 08:25:04 +0200
committerPaweł Redman <pawel.redman@gmail.com>2016-03-30 08:25:04 +0200
commit4bf61f911194bb0b40d302df8d7dfff2fda19892 (patch)
tree1d8619d4cff047bf2a72aa6a1bcfe4e683f43226 /src/main.c
Initial commit.
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..65a7ab3
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,90 @@
+#include "common.h"
+#include <signal.h>
+#include <time.h>
+
+char *va(const char *fmt, ...)
+{
+ va_list vl;
+ static char buffer[4096];
+
+ va_start(vl, fmt);
+ vsnprintf(buffer, sizeof(buffer), fmt, vl);
+ va_end(vl);
+
+ return buffer;
+}
+
+int64_t get_time(void)
+{
+ struct timespec ts;
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+ return ts.tv_sec * 1000000000 + ts.tv_nsec;
+}
+
+int main(void)
+{
+ int rv = 0;
+ r_window *first_window;
+ phy_sim sim;
+ SDL_Thread *sim_thread;
+
+ if (r_init()) {
+ con_printf("fatal error: renderer initialization failed\n");
+ rv = 1;
+ goto quit;
+ }
+
+ if (ui_init()) {
+ con_printf("fatal error: UI initialization failed\n");
+ rv = 1;
+ goto quit;
+ }
+
+ signal(SIGINT, SIG_DFL);
+ signal(SIGTERM, SIG_DFL);
+
+ first_window = r_window_create();
+ if (!first_window) {
+ con_printf("fatal error: couldn't open first window\n");
+ rv = 1;
+ goto quit;
+ }
+
+ ui_renderer_window_register(first_window);
+
+ if (phy_sim_create(&sim)) {
+ con_printf("fatal error: phy_sim_create failed\n");
+ rv = 1;
+ goto quit;
+ }
+
+ sim_thread = SDL_CreateThread((SDL_ThreadFunction)phy_thread,
+ "phy_thread", &sim);
+ if (!sim_thread) {
+ con_printf("fatal error: SDL_CreateThread failed: %s\n",
+ SDL_GetError());
+ rv = 1;
+ goto quit;
+ }
+
+ while (1) {
+ SDL_Event event;
+
+ while (SDL_PollEvent(&event)) {
+ if (event.type == SDL_QUIT)
+ goto quit;
+ else
+ ui_event(&event);
+ }
+
+ ui_draw(&sim);
+ }
+
+quit:
+ con_printf("main: exitting, rv=%i\n", rv);
+ phy_sim_destroy(&sim);
+ ui_quit();
+ r_quit();
+ SDL_Quit();
+ return rv;
+}