/* 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 ASSET_H #define ASSET_H #include #include #include #include struct Paths { char *base; char *pref; }; static inline int assetPaths(struct Paths *paths) { paths->base = SDL_GetBasePath(); if (!paths->base) return -1; paths->pref = SDL_GetPrefPath("Causal Agency", "Entertainment Pack"); if (!paths->pref) return -1; return 0; } static inline SDL_RWops * assetOpen(const struct Paths *paths, const char *names[], size_t len) { const char *dirs[3] = { paths->pref, paths->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", dirs[i], names[j]); SDL_RWops *rw = SDL_RWFromFile(path, "rb"); if (rw) return rw; } } return NULL; } static inline SDL_RWops *assetOpenCards(const struct Paths *paths) { const char *names[3] = { "CARDS.DLL", "SOL.EXE", "cards.dll" }; SDL_RWops *rw = assetOpen(paths, 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], paths->pref, paths->base ); SDL_ShowSimpleMessageBox( SDL_MESSAGEBOX_ERROR, "Entertainment Pack", msg, NULL ); return NULL; } static inline SDL_RWops *assetOpenFreeCell(const struct Paths *paths) { const char *names[2] = { "FREECELL.EXE", "freecell.exe" }; return assetOpen(paths, names, 2); } #endif