nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #ifdef _MSC_VER nuclear@2: #include nuclear@2: #else nuclear@2: #include nuclear@2: #endif nuclear@2: #include "datapath.h" nuclear@2: nuclear@2: using namespace std; nuclear@2: nuclear@2: static vector first; nuclear@2: static stack> dpath_stack; nuclear@2: nuclear@2: static void init() nuclear@2: { nuclear@2: if(dpath_stack.empty()) { nuclear@2: dpath_stack.push(first); nuclear@2: } nuclear@2: } nuclear@2: nuclear@2: void reset_data_path() nuclear@2: { nuclear@2: init(); nuclear@2: nuclear@2: dpath_stack.top().clear(); nuclear@2: } nuclear@2: nuclear@2: void push_data_path() nuclear@2: { nuclear@2: init(); nuclear@2: nuclear@2: dpath_stack.push(dpath_stack.top()); nuclear@2: } nuclear@2: nuclear@2: void pop_data_path() nuclear@2: { nuclear@2: init(); nuclear@2: nuclear@2: dpath_stack.pop(); nuclear@2: } nuclear@2: nuclear@2: void add_data_path(const char *path) nuclear@2: { nuclear@2: init(); nuclear@2: nuclear@2: char *tmp = (char*)alloca(strlen(path) + 1); nuclear@2: strcpy(tmp, path); nuclear@2: nuclear@2: char *endp = strrchr(tmp, '/'); nuclear@2: if(endp) { nuclear@2: *endp = 0; nuclear@2: } nuclear@2: nuclear@2: dpath_stack.top().push_back(tmp); nuclear@2: } nuclear@2: nuclear@2: bool find_file(const char *fname, char *path) nuclear@2: { nuclear@2: FILE *fp; nuclear@2: nuclear@2: init(); nuclear@2: nuclear@2: for(size_t i=0; i