about summary refs log tree commit diff
path: root/asset.h
diff options
context:
space:
mode:
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