diff --git a/Src/1541fs.cpp b/Src/1541fs.cpp index 767f81c..303a397 100644 --- a/Src/1541fs.cpp +++ b/Src/1541fs.cpp @@ -194,7 +194,6 @@ uint8 FSDrive::open_file(int channel, const uint8 *name, int name_len) } // Open file -#ifndef __riscos__ if (chdir(dir_path)) set_error(ERR_NOTREADY); else if ((file[channel] = fopen(plain_name, mode_str)) != NULL) { @@ -202,26 +201,8 @@ uint8 FSDrive::open_file(int channel, const uint8 *name, int name_len) read_char[channel] = fgetc(file[channel]); } else set_error(ERR_FILENOTFOUND); - chdir(AppDirPath); -#else - { - char fullname[NAMEBUF_LENGTH]; - - // On RISC OS make a full filename - sprintf(fullname,"%s.%s",dir_path,plain_name); - if ((file[channel] = fopen(fullname, mode)) != NULL) - { - if (mode == FMODE_READ || mode == FMODE_M) - { - read_char[channel] = fgetc(file[channel]); - } - } - else - { - set_error(ERR_FILENOTFOUND); - } - } -#endif + if (chdir(AppDirPath) < 0) + set_error(ERR_NOTREADY); return ST_OK; } @@ -303,11 +284,6 @@ uint8 FSDrive::open_directory(int channel, const uint8 *pattern, int pattern_len char str[NAMEBUF_LENGTH]; char *p, *q; int i; - int filemode; - int filetype; - bool wildflag; - -#ifndef __riscos__ DIR *dir; struct dirent *de; struct stat statbuf; @@ -355,9 +331,11 @@ uint8 FSDrive::open_directory(int channel, const uint8 *pattern, int pattern_len if (match(ascii_pattern, de->d_name)) { // Get file statistics - chdir(dir_path); + if (chdir(dir_path) < 0) + continue; stat(de->d_name, &statbuf); - chdir(AppDirPath); + if (chdir(AppDirPath) < 0) + continue; // Clear line with spaces and terminate with null byte memset(buf, ' ', 31); @@ -403,61 +381,6 @@ uint8 FSDrive::open_directory(int channel, const uint8 *pattern, int pattern_len // Get next directory entry de = readdir(dir); } -#else - dir_full_info di; - dir_env de; - unsigned char c; - - // Much of this is very similar to the original - if ((pattern[0] == '0') && (pattern[1] == 0)) {pattern++;} - - // Concatenate dir_path and ascii_pattern in buffer ascii_pattern ==> read subdirs! - strcpy(ascii_pattern,dir_path); i = strlen(ascii_pattern); ascii_pattern[i++] = '.'; ascii_pattern[i] = 0; - convert_filename(pattern, ascii_pattern + i, &filemode, &filetype, &wildflag); - p = ascii_pattern + i; q = p; - do {c = *q++; if (c == '.') p = q;} while (c >= 32); - *(p-1) = 0; // separate directory-path and ascii_pattern - if ((uint8)(*p) < 32) {*p = '*'; *(p+1) = 0;} - - // We don't use tmpfile() -- problems involved! - DeleteFile(RO_TEMPFILE); // first delete it, if it exists - if ((file[channel] = fopen(RO_TEMPFILE,"wb+")) == NULL) - return(ST_OK); - de.offset = 0; de.buffsize = NAMEBUF_LENGTH; de.match = p; - - // Create directory title - copied from above - p = &buf[8]; - for (i=0; i<16 && dir_title[i]; i++) - *p++ = conv_to_64(dir_title[i], false); - fwrite(buf, 1, 32, file[channel]); - - do { - de.readno = 1; - if (ReadDirNameInfo(ascii_pattern,&di,&de) != NULL) - de.offset = -1; - else if (de.readno > 0) { // don't have to check for match here - memset(buf,' ',31); buf[31] = 0; // most of this: see above - p = buf; *p++ = 0x01; *p++ = 0x01; - i = (di.length + 254) / 254; *p++ = i & 0xff; *p++ = (i>>8) & 0xff; - p++; - if (i < 10) - *p++ = ' '; - if (i < 100) - *p++ = ' '; - strcpy(str, di.name); - *p++ = '\"'; q = p; - for (i=0; (i<16 && str[i]); i++) - *q++ = conv_to_64(str[i], true); - *q++ = '\"'; p += 18; - if ((di.otype & 2) == 0) { - *p++ = 'P'; *p++ = 'R'; *p++ = 'G'; - } else { - *p++ = 'D'; *p++ = 'I'; *p++ = 'R'; - } - fwrite(buf, 1, 32, file[channel]); - } - } while (de.offset != -1); -#endif // Final line fwrite("\001\001\0\0BLOCKS FREE. \0\0", 1, 32, file[channel]); @@ -466,10 +389,8 @@ uint8 FSDrive::open_directory(int channel, const uint8 *pattern, int pattern_len rewind(file[channel]); read_char[channel] = fgetc(file[channel]); -#ifndef __riscos // Close directory closedir(dir); -#endif return ST_OK; }