diff options
Diffstat (limited to 'src/Support.cpp')
-rw-r--r-- | src/Support.cpp | 169 |
1 files changed, 2 insertions, 167 deletions
diff --git a/src/Support.cpp b/src/Support.cpp index 2b033f5..850d0bb 100644 --- a/src/Support.cpp +++ b/src/Support.cpp @@ -1,18 +1,13 @@ -#include <dirent.h> -#include <fcntl.h> +#include <stdbool.h> +#include <stdlib.h> #include <GLFW/glfw3.h> #include "Support.h" -#include "Files.h" int Random() { -#if RAND_MAX >= 65535 return (rand() % 65535) - 32767; -#else -#error please fix this for your platform -#endif } bool IsKeyDown(int key) @@ -20,163 +15,3 @@ bool IsKeyDown(int key) const auto window = glfwGetCurrentContext(); return glfwGetKey(window, key) == GLFW_PRESS; } - -#ifndef O_BINARY -#define O_BINARY 0 -#endif - -#ifndef MAX_PATH -#define MAX_PATH 256 -#endif - -static int find_filename(char *filename) -{ - char *ptr; - char *cur; - char *next; - DIR *dir; - struct dirent *dirent; - - if (access(filename, R_OK) == 0) { - return 1; - } - - ptr = filename; - - while (*ptr) { - if (ptr == filename || *ptr == '/') { - if (*ptr == '/') { - cur = ptr+1; - } else { - cur = ptr; - } - - if (*cur == 0) { - /* hit the end */ - break; - } - - next = strchr(cur, '/'); - - if (ptr != filename) { - *ptr = 0; - } - - if (next) { - *next = 0; - } - - if (ptr == filename && *ptr == '/') { - dir = opendir("/"); - } else { - dir = opendir(filename); - } - - if (dir == NULL) { - if (ptr != filename) { - *ptr = '/'; - } - - if (next) { - *next = 0; - } - - return 0; - } - - while ((dirent = readdir(dir)) != NULL) { - if (strcasecmp(cur, dirent->d_name) == 0) { - strcpy(cur, dirent->d_name); - break; - } - } - - closedir(dir); - - if (ptr != filename) { - *ptr = '/'; - } - - if (next) { - *next = '/'; - ptr = next; - } else { - ptr++; - } - } else { - ptr++; - } - } - - if (access(filename, R_OK) == 0) { - return 1; - } - - return 0; -} - -static void fix_filename(const char *original, char *fixed) -{ - const char *start; - int i; - int len; - - start = original; - if (original[0] == ':') { - start = &original[1]; - } - - fixed[MAX_PATH-1] = 0; - - strncpy(fixed, start, MAX_PATH); - - /* check to see if strncpy overwrote the terminator */ - if (fixed[MAX_PATH-1] != 0) { - fixed[MAX_PATH-1] = 0; - - fprintf(stderr, "ERROR: file truncation error: %s -> %s\n", - original, fixed); - } - - len = strlen(fixed); - for (i = 0; i < len; i++) { - if (fixed[i] == ':') { - fixed[i] = '/'; - } - } - - /* - here we would try to see if the file is available (game dir), - else try another dir - - really, this function also needs a flag to indicate whether - it should only go to local (write) or both (read) - */ - - if (find_filename(fixed) == 0) { - fprintf(stderr, "find failed: %s\n", fixed); - } -} - -/* -Convenient Filename Hacks -*/ - -int Files::OpenFile(Str255 Name) -{ - char filename1[MAX_PATH]; - - fix_filename((char *)Name, filename1); - - sFile = open(filename1, O_RDONLY | O_BINARY); - return sFile; -} - -void Files::EndLoad() -{ - if (sFile != -1) { - FSClose( sFile ); - } - - sFile = -1; -} |