FILE * OpenCaptureFile(const char * type,const char * ext) { if(capturedir.empty()) { LOG_MSG("Please specify a capture directory"); return 0; } Bitu last=0; char file_start[16]; dir_information * dir; /* Find a filename to open */ dir = open_directory(capturedir.c_str()); if (!dir) { //Try creating it first Cross::CreateDir(capturedir); dir=open_directory(capturedir.c_str()); if(!dir) { LOG_MSG("Can't open dir %s for capturing %s",capturedir.c_str(),type); return 0; } } strcpy(file_start,RunningProgram); lowcase(file_start); strcat(file_start,"_"); bool is_directory; char tempname[CROSS_LEN]; bool testRead = read_directory_first(dir, tempname, is_directory ); for ( ; testRead; testRead = read_directory_next(dir, tempname, is_directory) ) { char * test=strstr(tempname,ext); if (!test || strlen(test)!=strlen(ext)) continue; *test=0; if (strncasecmp(tempname,file_start,strlen(file_start))!=0) continue; Bitu num=atoi(&tempname[strlen(file_start)]); if (num>=last) last=num+1; } close_directory( dir ); char file_name[CROSS_LEN]; sprintf(file_name,"%s%c%s%03d%s",capturedir.c_str(),CROSS_FILESPLIT,file_start,last,ext); /* Open the actual file */ FILE * handle=fopen(file_name,"wb"); if (handle) { LOG_MSG("Capturing %s to %s",type,file_name); } else { LOG_MSG("Failed to open %s for capturing %s",file_name,type); } return handle; }
bool DOS_Drive_Cache::ReadDir(Bit16u id, char* &result) { // shouldnt happen... if (id>MAX_OPENDIRS) return false; if (!IsCachedIn(dirSearch[id])) { // Try to open directory dir_information* dirp = open_directory(dirPath); if (!dirp) { if (dirSearch[id]) { dirSearch[id]->id = MAX_OPENDIRS; dirSearch[id] = 0; } return false; } // Read complete directory char dir_name[CROSS_LEN]; bool is_directory; if (read_directory_first(dirp, dir_name, is_directory)) { CreateEntry(dirSearch[id], dir_name, is_directory); while (read_directory_next(dirp, dir_name, is_directory)) { CreateEntry(dirSearch[id], dir_name, is_directory); } } // close dir close_directory(dirp); // Info /* if (!dirp) { LOG_DEBUG("DIR: Error Caching in %s",dirPath); return false; } else { char buffer[128]; sprintf(buffer,"DIR: Caching in %s (%d Files)",dirPath,dirSearch[srchNr]->fileList.size()); LOG_DEBUG(buffer); };*/ }; if (SetResult(dirSearch[id], result, dirSearch[id]->nextEntry)) return true; if (dirSearch[id]) { dirSearch[id]->id = MAX_OPENDIRS; dirSearch[id] = 0; } return false; }
bool read_directory_first(dir_information* dirp, char* entry_name, bool& is_directory) { return read_directory_next(dirp,entry_name,is_directory); }
bool physfsDrive::read_directory_first(void* dirp, char* entry_name, bool& is_directory) { return read_directory_next(dirp, entry_name, is_directory); }