diff options
Diffstat (limited to '')
-rw-r--r-- | asset.h (renamed from path.h) | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/path.h b/asset.h index f3832d9..cc37709 100644 --- a/path.h +++ b/asset.h @@ -14,21 +14,34 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef PATH_H -#define PATH_H +#ifndef ASSET_H +#define ASSET_H #include <SDL_filesystem.h> #include <SDL_rwops.h> -#include <stddef.h> #include <stdio.h> +#include <stdlib.h> + +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 * -pathSearch(const char *base, const char *pref, const char **names, size_t len) { - const char *paths[3] = { pref, base, "" }; +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", paths[i], names[j]); + snprintf(path, sizeof(path), "%s%s", dirs[i], names[j]); SDL_RWops *rw = SDL_RWFromFile(path, "rb"); if (rw) return rw; } @@ -36,22 +49,24 @@ pathSearch(const char *base, const char *pref, const char **names, size_t len) { return NULL; } -static inline SDL_RWops *pathCards(const char *base, const char *pref) { +static inline SDL_RWops *assetOpenCards(const struct Paths *paths) { const char *names[3] = { "CARDS.DLL", "SOL.EXE", "cards.dll" }; - SDL_RWops *rw = pathSearch(base, pref, names, 3); + 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], pref, base + names[0], names[1], paths->pref, paths->base + ); + SDL_ShowSimpleMessageBox( + SDL_MESSAGEBOX_ERROR, "Entertainment Pack", msg, NULL ); - SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Cards", msg, NULL); return NULL; } -static inline SDL_RWops *pathFreeCell(const char *base, const char *pref) { +static inline SDL_RWops *assetOpenFreeCell(const struct Paths *paths) { const char *names[2] = { "FREECELL.EXE", "freecell.exe" }; - return pathSearch(base, pref, names, 2); + return assetOpen(paths, names, 2); } #endif |