static SDL_Window *main_window;
static SDL_Renderer *main_renderer;
int main(int argc, char *argv[])
{
/* Sensible default options */
struct game_options options = {
.x_res = 800,
.y_res = 600,
.windowed = SDL_FALSE,
.ghosting = SDL_TRUE,
.level = 1,
.p1_human = SDL_TRUE,
.p2_human = SDL_FALSE
};
/* rc options take precedence over defaults */
get_rc_options(&options);
/* command line options take ultimate precedence */
parse_commandline_options(&options, argc, argv);
if (options.error) {
fprintf(stderr, "Error parsing options: %s\n", options.error);
exit(EXIT_FAILURE);
}
/* Halt if user passed --help, --version etc */
if (options.stop_before_sdl) {
exit(EXIT_SUCCESS);
}
/* Get SDL up and running */
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER)) {
fprintf(stderr, "SDL initialization failed: %s\n",
SDL_GetError());
exit(EXIT_FAILURE);
}
atexit(cleanup);
int rv;
if (options.windowed) {
rv = SDL_CreateWindowAndRenderer(options.x_res, options.y_res,
SDL_WINDOW_INPUT_FOCUS,
&main_window, &main_renderer);
} else {
rv = SDL_CreateWindowAndRenderer(0, 0,
SDL_WINDOW_FULLSCREEN_DESKTOP,
&main_window, &main_renderer);
}
if (rv || !main_window || !main_renderer) {
fprintf(stderr, "Couldn't create SDL window or renderer: %s\n",
SDL_GetError());
exit(EXIT_FAILURE);
}
if (options.windowed) {
SDL_ShowCursor(SDL_DISABLE);
} else {
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
SDL_RenderSetLogicalSize(main_renderer, options.x_res,
options.y_res);
}
SDL_SetRenderDrawColor(main_renderer, P_BLACK);
SDL_RenderClear(main_renderer);
SDL_RenderPresent(main_renderer);