#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <execinfo.h>
#include <unistd.h>

#include "../include/rx.h"

#define BACKTRACE_SIZE 10

void handle_segfault(int signal) {
  void *list[BACKTRACE_SIZE];
  size_t size = backtrace(list, BACKTRACE_SIZE);
  fprintf(stderr, "ERROR: signal %d:\n", signal);
  backtrace_symbols_fd(list, size, STDERR_FILENO);
  exit(EXIT_FAILURE);
}

rx_t rx;

void do_update(void) {
  rx_update(&rx);
  rx_draw(&rx);
}

int main(void) {
  rx_init(&rx);
  struct sigaction sigint_action;
  sigint_action.sa_handler = handle_segfault;
  sigint_action.sa_flags = 0;
  sigemptyset(&sigint_action.sa_mask);
  sigaction(SIGSEGV, &sigint_action, NULL);
  while (!rx.quit) {
    do_update();
  }
  rx_free(&rx);
  return EXIT_SUCCESS;
}
