diff --git a/src/dos/dos_programs.cpp b/src/dos/dos_programs.cpp index 55a9d7fe..41853a30 100644 --- a/src/dos/dos_programs.cpp +++ b/src/dos/dos_programs.cpp @@ -1322,7 +1322,7 @@ public: dos.dta(dos.tables.tempdta); for(ct = 0; ct < imgDisks.size(); ct++) { - DriveManager::CycleAllDisks(); + DriveManager::CycleDisks(drive - 'A', (ct == (imgDisks.size() - 1))); char root[7] = {drive,':','\\','*','.','*',0}; DOS_FindFirst(root, DOS_ATTR_VOLUME); // force obtaining the label and saving it in dirCache @@ -1337,20 +1337,22 @@ public: if (paths.size() == 1) { newdrive = imgDisks[0]; - if(((fatDrive *)newdrive)->loadedDisk->hardDrive) { - if(imageDiskList[2] == NULL) { - imageDiskList[2] = ((fatDrive *)newdrive)->loadedDisk; - updateDPT(); - return; + switch (drive - 'A') { + case 0: + case 1: + if(!((fatDrive *)newdrive)->loadedDisk->hardDrive) { + if(imageDiskList[drive - 'A'] != NULL) delete imageDiskList[drive - 'A']; + imageDiskList[drive - 'A'] = ((fatDrive *)newdrive)->loadedDisk; } - if(imageDiskList[3] == NULL) { - imageDiskList[3] = ((fatDrive *)newdrive)->loadedDisk; + break; + case 2: + case 3: + if(((fatDrive *)newdrive)->loadedDisk->hardDrive) { + if(imageDiskList[drive - 'A'] != NULL) delete imageDiskList[drive - 'A']; + imageDiskList[drive - 'A'] = ((fatDrive *)newdrive)->loadedDisk; updateDPT(); - return; } - } - if(!((fatDrive *)newdrive)->loadedDisk->hardDrive) { - imageDiskList[0] = ((fatDrive *)newdrive)->loadedDisk; + break; } } } else if (fstype=="iso") { diff --git a/src/dos/drives.cpp b/src/dos/drives.cpp index 46c91291..832eb91f 100644 --- a/src/dos/drives.cpp +++ b/src/dos/drives.cpp @@ -169,26 +169,28 @@ void DriveManager::CycleDisk(bool pressed) { } */ -void DriveManager::CycleAllDisks(void) { - for (int idrive=0; idrive 1) { - // cycle disk - int currentDisk = driveInfos[idrive].currentDisk; - DOS_Drive* oldDisk = driveInfos[idrive].disks[currentDisk]; - currentDisk = (currentDisk + 1) % numDisks; - DOS_Drive* newDisk = driveInfos[idrive].disks[currentDisk]; - driveInfos[idrive].currentDisk = currentDisk; - - // copy working directory, acquire system resources and finally switch to next drive - strcpy(newDisk->curdir, oldDisk->curdir); - newDisk->Activate(); - Drives[idrive] = newDisk; - LOG_MSG("Drive %c: disk %d of %d now active", 'A'+idrive, currentDisk+1, numDisks); - } +void DriveManager::CycleDisks(int drive, bool notify) { + int numDisks = (int)driveInfos[drive].disks.size(); + if (numDisks > 1) { + // cycle disk + int currentDisk = driveInfos[drive].currentDisk; + DOS_Drive* oldDisk = driveInfos[drive].disks[currentDisk]; + currentDisk = (currentDisk + 1) % numDisks; + DOS_Drive* newDisk = driveInfos[drive].disks[currentDisk]; + driveInfos[drive].currentDisk = currentDisk; + + // copy working directory, acquire system resources and finally switch to next drive + strcpy(newDisk->curdir, oldDisk->curdir); + newDisk->Activate(); + Drives[drive] = newDisk; + if (notify) LOG_MSG("Drive %c: disk %d of %d now active", 'A'+drive, currentDisk+1, numDisks); } } +void DriveManager::CycleAllDisks(void) { + for (int idrive=0; idrive