+#if PLATFORM_UNIX
+#include <sys/types.h>
+#include <pwd.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <dirent.h>
+
+// some but not all of this is code from PhysicsFS: http://icculus.org/physfs/
+// the zlib license on physfs allows this cut-and-pasting.
+static int locateOneElement(char *buf)
+{
+ char *ptr;
+ char **rc;
+ char **i;
+ DIR *dirp;
+
+ //if (PHYSFS_exists(buf))
+ if (access(buf, F_OK) == 0)
+ return(1); /* quick rejection: exists in current case. */
+
+ ptr = strrchr(buf, '/'); /* find entry at end of path. */
+ if (ptr == NULL)
+ {
+ dirp = opendir(".");
+ ptr = buf;
+ } /* if */
+ else
+ {
+ *ptr = '\0';
+ dirp = opendir(buf);
+ *ptr = '/';
+ ptr++; /* point past dirsep to entry itself. */
+ } /* else */
+
+ struct dirent *dent;
+ while ((dent = readdir(dirp)) != NULL)
+ {
+ if (stricmp(dent->d_name, ptr) == 0)
+ {
+ strcpy(ptr, dent->d_name); /* found a match. Overwrite with this case. */
+ closedir(dirp);
+ return(1);
+ } /* if */
+ } /* for */
+
+ /* no match at all... */
+ closedir(dirp);
+ return(0);
+} /* locateOneElement */
+
+
+static inline const char *getUserDirByUID(void)
+{
+ struct passwd *pw = getpwuid(getuid());
+ if (pw != NULL)
+ return(pw->pw_dir);
+ return(NULL);
+} /* getUserDirByUID */
+
+
+static inline const char *getPrefPath(void)
+{
+ static char *prefpath = NULL;
+ if (prefpath == NULL)
+ {
+ const char *homedir = getenv("HOME");
+ if (homedir == NULL)
+ homedir = getUserDirByUID();
+ if (homedir == NULL)
+ homedir = "."; // oh well.
+
+#if (defined(__APPLE__) && defined(__MACH__))
+ const char *PREFPATHNAME = "Library/Application Support/Lugaru";
+#else
+ const char *PREFPATHNAME = ".lugaru";
+#endif
+ size_t len = strlen(homedir) + strlen(PREFPATHNAME) + 2;
+ prefpath = new char[len];
+ snprintf(prefpath, len, "%s/%s", homedir, PREFPATHNAME);
+ }
+ return(prefpath);
+}
+
+static int locateCorrectCase(char *buf, bool makedirs)