nuclear@2: /* nuclear@2: Stereoscopic tunnel for iOS. nuclear@2: Copyright (C) 2011 John Tsiombikas nuclear@2: nuclear@2: This program is free software: you can redistribute it and/or modify nuclear@2: it under the terms of the GNU General Public License as published by nuclear@2: the Free Software Foundation, either version 3 of the License, or nuclear@2: (at your option) any later version. nuclear@2: nuclear@2: This program is distributed in the hope that it will be useful, nuclear@2: but WITHOUT ANY WARRANTY; without even the implied warranty of nuclear@2: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nuclear@2: GNU General Public License for more details. nuclear@2: nuclear@2: You should have received a copy of the GNU General Public License nuclear@2: along with this program. If not, see . nuclear@2: */ nuclear@2: nuclear@2: nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #include "respath.h" nuclear@2: #include "config.h" nuclear@24: #include "assman.h" nuclear@2: nuclear@2: #ifdef IPHONE nuclear@2: #include nuclear@2: #endif nuclear@2: nuclear@2: nuclear@2: #ifndef IPHONE nuclear@2: struct path_node { nuclear@2: char *path; nuclear@2: struct path_node *next; nuclear@2: }; nuclear@2: nuclear@2: static struct path_node *pathlist; nuclear@2: nuclear@2: void add_resource_path(const char *path) nuclear@2: { nuclear@2: struct path_node *node = 0; nuclear@2: nuclear@2: if(!(node = malloc(sizeof *node)) || !(node->path = malloc(strlen(path) + 1))) { nuclear@2: free(node); nuclear@2: fprintf(stderr, "failed to add path: %s: %s\n", path, strerror(errno)); nuclear@2: return; nuclear@2: } nuclear@2: strcpy(node->path, path); nuclear@2: node->next = pathlist; nuclear@2: pathlist = node; nuclear@2: } nuclear@2: nuclear@2: char *find_resource(const char *fname, char *path, size_t sz) nuclear@2: { nuclear@2: static char buffer[1024]; nuclear@2: struct path_node *node; nuclear@2: nuclear@2: if(!path) { nuclear@2: path = buffer; nuclear@2: sz = sizeof buffer; nuclear@2: } nuclear@2: nuclear@2: node = pathlist; nuclear@2: while(node) { nuclear@24: ass_file *fp; nuclear@24: nuclear@2: snprintf(path, sz, "%s/%s", node->path, fname); nuclear@24: if((fp = ass_fopen(path, "r"))) { nuclear@24: ass_fclose(fp); nuclear@2: return path; nuclear@2: } nuclear@2: node = node->next; nuclear@2: } nuclear@2: nuclear@2: fprintf(stderr, "can't find resource: %s\n", fname); nuclear@2: return 0; nuclear@2: } nuclear@2: nuclear@2: #else /* IPHONE */ nuclear@2: nuclear@2: void add_resource_path(const char *path) nuclear@2: { nuclear@2: } nuclear@2: nuclear@2: nuclear@2: char *find_resource(const char *fname, char *path, size_t sz) nuclear@2: { nuclear@2: static char buffer[1024]; nuclear@2: CFBundleRef bundle; nuclear@2: CFURLRef url; nuclear@2: CFStringRef cfname; nuclear@2: nuclear@2: cfname = CFStringCreateWithCString(0, fname, kCFStringEncodingASCII); nuclear@2: nuclear@2: bundle = CFBundleGetMainBundle(); nuclear@2: if(!(url = CFBundleCopyResourceURL(bundle, cfname, 0, 0))) { nuclear@2: return 0; nuclear@2: } nuclear@2: nuclear@2: if(!path) { nuclear@2: path = buffer; nuclear@2: sz = sizeof buffer; nuclear@2: } nuclear@2: nuclear@2: if(!CFURLGetFileSystemRepresentation(url, 1, (unsigned char*)path, sz)) { nuclear@2: return 0; nuclear@2: } nuclear@2: return path; nuclear@2: } nuclear@2: #endif