/* * Copyright (C) 2021 P. J. McDermott * * This file is part of Dodge Balls * * Dodge Balls is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Dodge Balls is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Dodge Balls. If not, see . */ #include #include #include #include #include #include #include "defs.h" #include "main.h" #include "output.h" static const char *_db_games_dir; static const char *_db_fonts_dir; static SDL_Window *_db_window; static SDL_Renderer *_db_renderer; static void _db_find_dirs(char *program_name) { char *program_dir; program_dir = realpath(dirname(program_name), NULL); if (strcmp(program_dir, ABS_BUILDDIR) == 0) { /* Running in place */ _db_games_dir = ABS_BUILDDIR "/games"; _db_fonts_dir = ABS_BUILDDIR "/fonts"; } else { /* Running from installation */ _db_games_dir = GAMESDIR; _db_fonts_dir = FONTSDIR; } free(program_dir); } static int _db_init(void) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { db_err("Failed to initialize SDL (%s)", SDL_GetError()); return -1; } if (TTF_Init() < 0) { db_err("Failed to initialize SDL_ttf (%s)", TTF_GetError()); return -1; } _db_window = SDL_CreateWindow("Dodge Balls", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, DB_WINDOW_W, DB_WINDOW_H, 0); if (_db_window == NULL) { db_err("Failed to create window (%s)", SDL_GetError()); SDL_Quit(); return -1; } _db_renderer = SDL_CreateRenderer(_db_window, -1, 0); if (_db_renderer == NULL) { db_err("Failed to create renderer (%s)", SDL_GetError()); SDL_DestroyWindow(_db_window); SDL_Quit(); return -1; } SDL_DisableScreenSaver(); return 0; } static void _db_quit(void) { SDL_EnableScreenSaver(); SDL_DestroyRenderer(_db_renderer); SDL_DestroyWindow(_db_window); TTF_Quit(); SDL_Quit(); } const char * db_get_games_dir(void) { return _db_games_dir; } const char * db_get_fonts_dir(void) { return _db_fonts_dir; } SDL_Window * db_get_window(void) { return _db_window; } SDL_Renderer * db_get_renderer(void) { return _db_renderer; } int main(int argc, char *argv[]) { /* Find data directories */ _db_find_dirs(argv[0]); /* Initialize SDL libraries */ if (_db_init() < 0) { return EXIT_FAILURE; } db_main_menu(); /* Quit SDL libraries */ _db_quit(); return EXIT_SUCCESS; }