From c6cbd3bccc171918e95c629d591a9d1e7c2d7c97 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Thu, 18 Mar 2021 10:39:09 -0400 Subject: main: Refactor into functions --- (limited to 'src') diff --git a/src/main.c b/src/main.c index d64caae..d772449 100644 --- a/src/main.c +++ b/src/main.c @@ -26,68 +26,102 @@ #include "game.h" #include "output.h" -int -main(int argc, char *argv[]) +static void +_db_find_dirs(char *program_name, + const char **games_dir, const char **fonts_dir) { - char *program_dir; - const char *games_dir; - const char *fonts_dir; - SDL_Window *window; - SDL_Renderer *renderer; - SDL_Texture *texture; - struct db_game **games; - int n; - int i; + char *program_dir; - /* Find data directories */ - program_dir = realpath(dirname(argv[0]), NULL); + program_dir = realpath(dirname(program_name), NULL); if (strcmp(program_dir, ABS_BUILDDIR) == 0) { /* Running in place */ - games_dir = ABS_BUILDDIR "/games"; - fonts_dir = ABS_BUILDDIR "/fonts"; + *games_dir = ABS_BUILDDIR "/games"; + *fonts_dir = ABS_BUILDDIR "/fonts"; } else { /* Running from installation */ - games_dir = GAMESDIR; - fonts_dir = FONTSDIR; + *games_dir = GAMESDIR; + *fonts_dir = FONTSDIR; } free(program_dir); +} - /* Initialize SDL libraries */ +static int +_db_init(SDL_Window **window, SDL_Renderer **renderer, SDL_Texture **texture) +{ if (SDL_Init(SDL_INIT_VIDEO) < 0) { db_err("Failed to initialize SDL (%s)", SDL_GetError()); - return EXIT_FAILURE; + return -1; } + if (TTF_Init() < 0) { db_err("Failed to initialize SDL_ttf (%s)", TTF_GetError()); - return EXIT_FAILURE; + return -1; } - window = SDL_CreateWindow("Dodge Balls", + + *window = SDL_CreateWindow("Dodge Balls", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0); - if (window == NULL) { + if (*window == NULL) { db_err("Failed to create window (%s)", SDL_GetError()); SDL_Quit(); - return EXIT_FAILURE; + return -1; } - renderer = SDL_CreateRenderer(window, -1, 0); - if (renderer == NULL) { + + *renderer = SDL_CreateRenderer(*window, -1, 0); + if (*renderer == NULL) { db_err("Failed to create renderer (%s)", SDL_GetError()); - SDL_DestroyWindow(window); + SDL_DestroyWindow(*window); SDL_Quit(); - return EXIT_FAILURE; + return -1; } - texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, + + *texture = SDL_CreateTexture(*renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 640, 480); - if (texture == NULL) { + if (*texture == NULL) { db_err("Failed to create texture (%s)", SDL_GetError()); - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); + SDL_DestroyRenderer(*renderer); + SDL_DestroyWindow(*window); SDL_Quit(); - return EXIT_FAILURE; + return -1; } + SDL_DisableScreenSaver(); + return 0; +} + +static void +_db_quit(SDL_Window *window, SDL_Renderer *renderer, SDL_Texture *texture) +{ + SDL_EnableScreenSaver(); + SDL_DestroyTexture(texture); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + TTF_Quit(); + SDL_Quit(); +} + +int +main(int argc, char *argv[]) +{ + const char *games_dir; + const char *fonts_dir; + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *texture; + struct db_game **games; + int n; + int i; + + /* Find data directories */ + _db_find_dirs(argv[0], &games_dir, &fonts_dir); + + /* Initialize SDL libraries */ + if (_db_init(&window, &renderer, &texture) < 0) { + return EXIT_FAILURE; + } + /* Find games */ n = db_games_find(games_dir, &games); if (n > 0) { @@ -106,12 +140,7 @@ main(int argc, char *argv[]) SDL_Delay(1000); /* Quit SDL libraries */ - SDL_EnableScreenSaver(); - SDL_DestroyTexture(texture); - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); - TTF_Quit(); - SDL_Quit(); + _db_quit(window, renderer, texture); return EXIT_SUCCESS; } -- cgit v0.9.1