/* Copyright (C) 2019 C. McEnroe * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #ifndef PATH_H #define PATH_H #include #include #include #include static inline SDL_RWops * pathSearch(const char *base, const char *pref, const char **names, size_t len) { const char *paths[3] = { pref, base, "" }; for (size_t i = 0; i < 3; ++i) { for (size_t j = 0; j < len; ++j) { char path[1024]; snprintf(path, sizeof(path), "%s%s", paths[i], names[j]); SDL_RWops *rw = SDL_RWFromFile(path, "rb"); if (rw) return rw; } } return NULL; } static inline SDL_RWops * pathFind(const char *base, const char *pref, const char *name) { return pathSearch(base, pref, &name, 1); } static inline SDL_RWops *pathCards(const char *base, const char *pref) { const char *names[3] = { "CARDS.DLL", "SOL.EXE", "cards.dll" }; SDL_RWops *rw = pathSearch(base, pref, names, 3); if (rw) return rw; char msg[4096]; snprintf( msg, sizeof(msg), "%s or %s not found in:\n%s\n%s", names[0], names[1], pref, base ); SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Cards", msg, NULL); return NULL; } #endif