From b7dadc1d5ea864381a0ca21bcecf435acf775cc3 Mon Sep 17 00:00:00 2001 From: maron2000 <68574602+maron2000@users.noreply.github.com> Date: Fri, 29 Sep 2023 19:40:26 +0900 Subject: [PATCH 1/3] IMGMOUNT: Warn if mounted image is not formatted. --- contrib/translations/de/de_DE.lng | 4 ++++ contrib/translations/de/de_pc98.lng | 4 ++++ contrib/translations/en/en_US.lng | 4 ++++ contrib/translations/es/es_ES.lng | 4 ++++ contrib/translations/fr/fr_FR.lng | 4 ++++ contrib/translations/it/it_IT.lng | 4 ++++ contrib/translations/ja/ja_JP.lng | 4 ++++ contrib/translations/ko/ko_KR.lng | 4 ++++ contrib/translations/nl/nl_NL.lng | 4 ++++ contrib/translations/pt/pt_BR.lng | 4 ++++ contrib/translations/tr/tr_TR.lng | 4 ++++ contrib/translations/zh/zh_CN.lng | 4 ++++ contrib/translations/zh/zh_TW.lng | 4 ++++ src/dos/dos_programs.cpp | 8 +++++++- 14 files changed, 59 insertions(+), 1 deletion(-) diff --git a/contrib/translations/de/de_DE.lng b/contrib/translations/de/de_DE.lng index 552bc7d02ac..9c6daea7844 100644 --- a/contrib/translations/de/de_DE.lng +++ b/contrib/translations/de/de_DE.lng @@ -582,6 +582,10 @@ Laufwerk %c als %s eingehangen :PROGRAM_MOUNT_STATUS_1 Aktuell eingehängte Laufwerke: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/de/de_pc98.lng b/contrib/translations/de/de_pc98.lng index d7178f410bf..de777a45085 100644 --- a/contrib/translations/de/de_pc98.lng +++ b/contrib/translations/de/de_pc98.lng @@ -582,6 +582,10 @@ Laufwerk %c als %s eingehangen :PROGRAM_MOUNT_STATUS_1 Aktuell eingehaengte Laufwerke: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/en/en_US.lng b/contrib/translations/en/en_US.lng index 50bb05b2fa8..05f28a2d893 100644 --- a/contrib/translations/en/en_US.lng +++ b/contrib/translations/en/en_US.lng @@ -453,6 +453,10 @@ Drive %c is mounted as %s :PROGRAM_MOUNT_STATUS_1 The currently mounted drives are: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/es/es_ES.lng b/contrib/translations/es/es_ES.lng index 554de78a1c7..6579eab7e45 100644 --- a/contrib/translations/es/es_ES.lng +++ b/contrib/translations/es/es_ES.lng @@ -454,6 +454,10 @@ Unidad %c montada como %s :PROGRAM_MOUNT_STATUS_1 Las unidades actualmente montadas son: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/fr/fr_FR.lng b/contrib/translations/fr/fr_FR.lng index 3bcfd60018e..91b63aacfc5 100644 --- a/contrib/translations/fr/fr_FR.lng +++ b/contrib/translations/fr/fr_FR.lng @@ -453,6 +453,10 @@ Le lecteur %c est monté en tant que %s :PROGRAM_MOUNT_STATUS_1 Les lecteurs actuellement montés sont : +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/it/it_IT.lng b/contrib/translations/it/it_IT.lng index b14d589e191..2245e76eb36 100644 --- a/contrib/translations/it/it_IT.lng +++ b/contrib/translations/it/it_IT.lng @@ -595,6 +595,10 @@ L'unità %c è montata come %s :PROGRAM_MOUNT_STATUS_1 Le unità attualmente montate sono: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/ja/ja_JP.lng b/contrib/translations/ja/ja_JP.lng index 237d8d4e2f8..ee9c91ea192 100644 --- a/contrib/translations/ja/ja_JP.lng +++ b/contrib/translations/ja/ja_JP.lng @@ -443,6 +443,10 @@ MOUSE [/?] [/U] [/V] :PROGRAM_MOUNT_STATUS_1 現在マウントされているドライブ: +. +:PROGRAM_MOUNT_NOT_FORMATTED +ドライブがフォーマットされてません。フォーマットしてください。 + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-41s %-10s %s diff --git a/contrib/translations/ko/ko_KR.lng b/contrib/translations/ko/ko_KR.lng index 14dd8df5c57..a96e9eb247f 100644 --- a/contrib/translations/ko/ko_KR.lng +++ b/contrib/translations/ko/ko_KR.lng @@ -453,6 +453,10 @@ MOUSE [/?] [/U] [/V] :PROGRAM_MOUNT_STATUS_1 현재 탑재된 드라이브: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-41s %-10s %s diff --git a/contrib/translations/nl/nl_NL.lng b/contrib/translations/nl/nl_NL.lng index 151f2ce19df..6f15acb8c5c 100644 --- a/contrib/translations/nl/nl_NL.lng +++ b/contrib/translations/nl/nl_NL.lng @@ -453,6 +453,10 @@ Schijf %c is gekoppeld als %s :PROGRAM_MOUNT_STATUS_1 De huidige gekoppelde schijven zijn: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/pt/pt_BR.lng b/contrib/translations/pt/pt_BR.lng index 2df7ff79e9c..ef74592a9c9 100644 --- a/contrib/translations/pt/pt_BR.lng +++ b/contrib/translations/pt/pt_BR.lng @@ -452,6 +452,10 @@ Unidade %c montada como %s :PROGRAM_MOUNT_STATUS_1 As unidades atualmente montadas são: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/tr/tr_TR.lng b/contrib/translations/tr/tr_TR.lng index 492f9b77424..b33f33f1f35 100644 --- a/contrib/translations/tr/tr_TR.lng +++ b/contrib/translations/tr/tr_TR.lng @@ -453,6 +453,10 @@ Bulunan CD-ROM'lar: %d :PROGRAM_MOUNT_STATUS_1 Şu anda bağlı sürücüler: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/zh/zh_CN.lng b/contrib/translations/zh/zh_CN.lng index ce8d03b7cf8..da155efe7c0 100644 --- a/contrib/translations/zh/zh_CN.lng +++ b/contrib/translations/zh/zh_CN.lng @@ -450,6 +450,10 @@ MOUSE [/?] [/U] [/V] :PROGRAM_MOUNT_STATUS_1 当前已挂载的驱动器为: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/zh/zh_TW.lng b/contrib/translations/zh/zh_TW.lng index 0b530b4b00d..ba2a249c044 100644 --- a/contrib/translations/zh/zh_TW.lng +++ b/contrib/translations/zh/zh_TW.lng @@ -450,6 +450,10 @@ MOUSE [/?] [/U] [/V] :PROGRAM_MOUNT_STATUS_1 目前已掛載的磁碟機有: +. +:PROGRAM_MOUNT_NOT_FORMATTED +Drive not formatted. Format it before accessing the drive. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/src/dos/dos_programs.cpp b/src/dos/dos_programs.cpp index 91403f5e00b..e4a7a0c7b00 100644 --- a/src/dos/dos_programs.cpp +++ b/src/dos/dos_programs.cpp @@ -5828,6 +5828,7 @@ class IMGMOUNT : public Program { return true; } + bool unformatted = false; bool MountFat(Bitu sizes[], const char drive, const bool isHardDrive, const std::string &str_size, const std::vector &paths, const signed char ide_index, const bool ide_slave, const int reserved_cylinders, bool roflag) { (void)reserved_cylinders; if (Drives[drive - 'A']) { @@ -5989,6 +5990,7 @@ class IMGMOUNT : public Program { diskfiles[i]=fdrive->loadedDisk->diskimg; if ((vhdImage&&ro)||roflag) fdrive->readonly=true; } + unformatted = fdrive->unformatted; } if (errorMessage) { if (!qmount) WriteOut(errorMessage); @@ -6008,7 +6010,10 @@ class IMGMOUNT : public Program { } lastmount = drive; if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"), drive, tmp.c_str()); - + if (unformatted) { + if(!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_NOT_FORMATTED")); + LOG_MSG("IMGMOUNT: Drive %c not formatted", drive); + } unsigned char driveIndex = drive-'A'; if (imgDisks.size() == 1 || (imgDisks.size() > 1 && driveIndex < 2 && (swapInDisksSpecificDrive == driveIndex || swapInDisksSpecificDrive == -1))) { imageDisk* image = ((fatDrive*)imgDisks[0])->loadedDisk; @@ -9000,6 +9005,7 @@ void DOS_SetupPrograms(void) { MSG_Add("PROGRAM_MOUNT_STATUS_RAMDRIVE", "Drive %c is mounted as RAM drive\n"); MSG_Add("PROGRAM_MOUNT_STATUS_2","Drive %c is mounted as %s\n"); MSG_Add("PROGRAM_MOUNT_STATUS_1","The currently mounted drives are:\n"); + MSG_Add("PROGRAM_MOUNT_NOT_FORMATTED","Drive not formatted. Format it before accessing the drive.\n"); MSG_Add("PROGRAM_IMGMOUNT_STATUS_FORMAT","%-5s %-47s %-12s %s\n"); MSG_Add("PROGRAM_IMGMOUNT_STATUS_NUMBER_FORMAT","%-12s %-40s %-12s %s\n"); MSG_Add("PROGRAM_IMGMOUNT_STATUS_2","The currently mounted drive numbers are:\n"); From b4b9947e57e891835c3494c506beffb62d3f319e Mon Sep 17 00:00:00 2001 From: maron2000 <68574602+maron2000@users.noreply.github.com> Date: Fri, 29 Sep 2023 20:13:42 +0900 Subject: [PATCH 2/3] dos_programs.cpp: Silence some warnings --- src/dos/dos_programs.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/dos/dos_programs.cpp b/src/dos/dos_programs.cpp index e4a7a0c7b00..8ff199dee2f 100644 --- a/src/dos/dos_programs.cpp +++ b/src/dos/dos_programs.cpp @@ -206,6 +206,7 @@ void DetachFromBios(imageDisk* image) { } void SwitchLanguage(int oldcp, int newcp, bool confirm) { + (void)oldcp; //unused auto iterold = langcp_map.find(lastmsgcp), iternew = langcp_map.find(newcp); std::string langold = iterold != langcp_map.end() ? iterold->second : "", langnew = iternew != langcp_map.end() ? iternew->second : ""; if (loadlang && langnew.size() && strcasecmp(langold.c_str(), langnew.c_str())) { @@ -5921,7 +5922,7 @@ class IMGMOUNT : public Program { return NULL; } QCow2Image::QCow2Header qcow2_header = QCow2Image::read_header(newDisk); - uint64_t sectors; + // uint64_t sectors; /* unused */ uint32_t imagesize; sizes[0] = 512; // default sector size if(qcow2_header.magic == QCow2Image::magic && (qcow2_header.version == 2 || qcow2_header.version == 3)) { @@ -5930,8 +5931,8 @@ class IMGMOUNT : public Program { WriteOut("Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes.\n", cluster_size); return 0; } - sectors = (uint64_t)qcow2_header.size / (uint64_t)sizes[0]; //sectors - imagesize = (uint32_t)(qcow2_header.size / 1024L); // imagesize + // sectors = (uint64_t)qcow2_header.size / (uint64_t)sizes[0]; /* unused */ + imagesize = (uint32_t)(qcow2_header.size / 1024L); sizes[1] = 63; // sectors sizes[2] = 16; // heads sizes[3] = (uint64_t)qcow2_header.size / sizes[0] / sizes[1] / sizes[2]; // cylinders @@ -7300,7 +7301,7 @@ void UTF8::Run() WriteOut("No input text found.\n"); return; } - int cp=dos.loaded_codepage; + // int cp=dos.loaded_codepage; /* unused */ char target[11] = "CP437"; if (dos.loaded_codepage==808) strcpy(target, "CP866"); else if (dos.loaded_codepage==859) strcpy(target, "CP858"); @@ -7837,7 +7838,7 @@ uint64_t VHDMAKE::ssizetou64(const char* s_size) { void VHDMAKE::Run() { bool bOverwrite = false; - bool bExists = false; + // bool bExists = false; /* unused */ uint32_t ret; char basename[256], filename[256]; @@ -7876,7 +7877,7 @@ void VHDMAKE::Run() imageDiskVHD::VHDInfo* p = info->parentInfo; while(p != NULL) { index++; - for(int i = 0; i < index; i++) WriteOut(" "); + for(uint32_t i = 0; i < index; i++) WriteOut(" "); WriteOut("child of \"%s\" (%s)", p->diskname.c_str(), vhdTypes[(int)p->vhdType]); if (p->vhdType != imageDiskVHD::VHD_TYPE_FIXED) WriteOut(MSG_Get("PROGRAM_VHDMAKE_BLOCKSTATS"), p->allocatedBlocks, p->totalBlocks); From ea6a2ffc6e75688ffcba2d225ca53738566b5440 Mon Sep 17 00:00:00 2001 From: maron2000 <68574602+maron2000@users.noreply.github.com> Date: Fri, 29 Sep 2023 21:03:51 +0900 Subject: [PATCH 3/3] IMGMOUNT: Warn if trying to mount images with unsupported extension --- contrib/translations/de/de_DE.lng | 4 ++++ contrib/translations/de/de_pc98.lng | 4 ++++ contrib/translations/en/en_US.lng | 4 ++++ contrib/translations/es/es_ES.lng | 4 ++++ contrib/translations/fr/fr_FR.lng | 4 ++++ contrib/translations/it/it_IT.lng | 4 ++++ contrib/translations/ja/ja_JP.lng | 4 ++++ contrib/translations/ko/ko_KR.lng | 4 ++++ contrib/translations/nl/nl_NL.lng | 4 ++++ contrib/translations/pt/pt_BR.lng | 4 ++++ contrib/translations/tr/tr_TR.lng | 4 ++++ contrib/translations/zh/zh_CN.lng | 4 ++++ contrib/translations/zh/zh_TW.lng | 4 ++++ src/dos/dos_programs.cpp | 35 ++++++++++++++++++++++------- 14 files changed, 79 insertions(+), 8 deletions(-) diff --git a/contrib/translations/de/de_DE.lng b/contrib/translations/de/de_DE.lng index 9c6daea7844..38448108527 100644 --- a/contrib/translations/de/de_DE.lng +++ b/contrib/translations/de/de_DE.lng @@ -586,6 +586,10 @@ Aktuell eingehängte Laufwerke: :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/de/de_pc98.lng b/contrib/translations/de/de_pc98.lng index de777a45085..e44e08273ff 100644 --- a/contrib/translations/de/de_pc98.lng +++ b/contrib/translations/de/de_pc98.lng @@ -586,6 +586,10 @@ Aktuell eingehaengte Laufwerke: :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/en/en_US.lng b/contrib/translations/en/en_US.lng index 05f28a2d893..a3a545e89cc 100644 --- a/contrib/translations/en/en_US.lng +++ b/contrib/translations/en/en_US.lng @@ -457,6 +457,10 @@ The currently mounted drives are: :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/es/es_ES.lng b/contrib/translations/es/es_ES.lng index 6579eab7e45..bfeea526873 100644 --- a/contrib/translations/es/es_ES.lng +++ b/contrib/translations/es/es_ES.lng @@ -458,6 +458,10 @@ Las unidades actualmente montadas son: :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/fr/fr_FR.lng b/contrib/translations/fr/fr_FR.lng index 91b63aacfc5..1a505ef89b5 100644 --- a/contrib/translations/fr/fr_FR.lng +++ b/contrib/translations/fr/fr_FR.lng @@ -457,6 +457,10 @@ Les lecteurs actuellement montés sont : :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/it/it_IT.lng b/contrib/translations/it/it_IT.lng index 2245e76eb36..712e5e83e69 100644 --- a/contrib/translations/it/it_IT.lng +++ b/contrib/translations/it/it_IT.lng @@ -599,6 +599,10 @@ Le unità attualmente montate sono: :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/ja/ja_JP.lng b/contrib/translations/ja/ja_JP.lng index ee9c91ea192..9cbbf73588b 100644 --- a/contrib/translations/ja/ja_JP.lng +++ b/contrib/translations/ja/ja_JP.lng @@ -447,6 +447,10 @@ MOUSE [/?] [/U] [/V] :PROGRAM_MOUNT_NOT_FORMATTED ドライブがフォーマットされてません。フォーマットしてください。 +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +サポートされてない拡張子 %s: raw IMG ファイルとしてマウントします。 + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-41s %-10s %s diff --git a/contrib/translations/ko/ko_KR.lng b/contrib/translations/ko/ko_KR.lng index a96e9eb247f..de07dc1ea20 100644 --- a/contrib/translations/ko/ko_KR.lng +++ b/contrib/translations/ko/ko_KR.lng @@ -457,6 +457,10 @@ MOUSE [/?] [/U] [/V] :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-41s %-10s %s diff --git a/contrib/translations/nl/nl_NL.lng b/contrib/translations/nl/nl_NL.lng index 6f15acb8c5c..2410f7ebcd3 100644 --- a/contrib/translations/nl/nl_NL.lng +++ b/contrib/translations/nl/nl_NL.lng @@ -457,6 +457,10 @@ De huidige gekoppelde schijven zijn: :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/pt/pt_BR.lng b/contrib/translations/pt/pt_BR.lng index ef74592a9c9..54ce6af150f 100644 --- a/contrib/translations/pt/pt_BR.lng +++ b/contrib/translations/pt/pt_BR.lng @@ -456,6 +456,10 @@ As unidades atualmente montadas são: :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/tr/tr_TR.lng b/contrib/translations/tr/tr_TR.lng index b33f33f1f35..b7303a21151 100644 --- a/contrib/translations/tr/tr_TR.lng +++ b/contrib/translations/tr/tr_TR.lng @@ -457,6 +457,10 @@ Bulunan CD-ROM'lar: %d :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/zh/zh_CN.lng b/contrib/translations/zh/zh_CN.lng index da155efe7c0..1c2e0fe399e 100644 --- a/contrib/translations/zh/zh_CN.lng +++ b/contrib/translations/zh/zh_CN.lng @@ -454,6 +454,10 @@ MOUSE [/?] [/U] [/V] :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/contrib/translations/zh/zh_TW.lng b/contrib/translations/zh/zh_TW.lng index ba2a249c044..13bd609f85d 100644 --- a/contrib/translations/zh/zh_TW.lng +++ b/contrib/translations/zh/zh_TW.lng @@ -454,6 +454,10 @@ MOUSE [/?] [/U] [/V] :PROGRAM_MOUNT_NOT_FORMATTED Drive not formatted. Format it before accessing the drive. +. +:PROGRAM_MOUNT_UNSUPPORTED_EXT +Unsupported extension %s: Mounted as raw IMG image. + . :PROGRAM_IMGMOUNT_STATUS_FORMAT %-5s %-47s %-12s %s diff --git a/src/dos/dos_programs.cpp b/src/dos/dos_programs.cpp index 8ff199dee2f..6e2d7da55af 100644 --- a/src/dos/dos_programs.cpp +++ b/src/dos/dos_programs.cpp @@ -5168,9 +5168,7 @@ class IMGMOUNT : public Program { return; } if (!rtype&&!rfstype&&fstype!="none"&&paths[0].length()>4) { - char ext[5]; - strncpy(ext, paths[0].substr(paths[0].length()-4).c_str(), 4); - ext[4]=0; + const char *ext = strrchr(paths[0].c_str(), '.'); if (!strcasecmp(ext, ".iso")||!strcasecmp(ext, ".cue")||!strcasecmp(ext, ".bin")||!strcasecmp(ext, ".chd")||!strcasecmp(ext, ".mdf")||!strcasecmp(ext, ".gog")||!strcasecmp(ext, ".ins")) { type="iso"; fstype="iso"; @@ -5257,7 +5255,12 @@ class IMGMOUNT : public Program { else { if (AttachToBiosAndIdeByIndex(newImage, (unsigned char)driveIndex, (unsigned char)ide_index, ide_slave)) { WriteOut(MSG_Get("PROGRAM_IMGMOUNT_MOUNT_NUMBER"), drive - '0', (!paths.empty()) ? (wpcolon&&paths[0].length()>1&&paths[0].c_str()[0]==':'?paths[0].c_str()+1:paths[0].c_str()) : (el_torito != ""?"El Torito floppy drive":(type == "ram"?"RAM drive":"-"))); - if (swapInDisksSpecificDrive == driveIndex || swapInDisksSpecificDrive == -1) { + const char *ext = strrchr(paths[0].c_str(), '.'); + if ((!IS_PC98_ARCH && strcasecmp(ext,".img") && strcasecmp(ext,".ima") && strcasecmp(ext,".vhd") && strcasecmp(ext,".qcow2")) + || (IS_PC98_ARCH && strcasecmp(ext,".hdi") && strcasecmp(ext,".nhd") && strcasecmp(ext,".img") && strcasecmp(ext,".ima"))){ + WriteOut(MSG_Get("PROGRAM_MOUNT_UNSUPPORTED_EXT"), ext); + } + if (swapInDisksSpecificDrive == driveIndex || swapInDisksSpecificDrive == -1) { for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { if (diskSwap[si] != NULL) { diskSwap[si]->Release(); @@ -5830,6 +5833,8 @@ class IMGMOUNT : public Program { } bool unformatted = false; + bool unsupported_ext = false; + int path_no; bool MountFat(Bitu sizes[], const char drive, const bool isHardDrive, const std::string &str_size, const std::vector &paths, const signed char ide_index, const bool ide_slave, const int reserved_cylinders, bool roflag) { (void)reserved_cylinders; if (Drives[drive - 'A']) { @@ -5867,14 +5872,14 @@ class IMGMOUNT : public Program { if (!strcasecmp(ext, ".hdi")) { skipDetectGeometry = true; } - if (!strcasecmp(ext, ".nhd")) { + else if (!strcasecmp(ext, ".nhd")) { skipDetectGeometry = true; } - if (!strcasecmp(ext, ".nfd")) { + else if (!strcasecmp(ext, ".nfd")) { skipDetectGeometry = true; } //for all vhd files where the system will autodetect the chs values, - if (!strcasecmp(ext, ".vhd")) { + else if (!strcasecmp(ext, ".vhd")) { ro=wpcolon&&paths[i].length()>1&&paths[i].c_str()[0]==':'; //load the file with imageDiskVHD, which supports fixed/dynamic/differential disks imageDiskVHD::ErrorCodes ret = imageDiskVHD::Open(ro?paths[i].c_str()+1:paths[i].c_str(), ro||roflag, &vhdImage); @@ -5913,7 +5918,7 @@ class IMGMOUNT : public Program { default: break; } } - if(!strcasecmp(ext, ".qcow2")) { + else if(!strcasecmp(ext, ".qcow2")) { ro = wpcolon && paths[i].length() > 1 && paths[i].c_str()[0] == ':'; const char* fname = ro ? paths[i].c_str() + 1 : paths[i].c_str(); FILE* newDisk = fopen_lock(fname, ro ? "rb" : "rb+", ro); @@ -5950,6 +5955,14 @@ class IMGMOUNT : public Program { newImage = NULL; } } + else if (!strcasecmp(ext,".img") || !strcasecmp(ext,".ima")){ // Raw MFM image format is typically .img or .ima + unsupported_ext = false; + } + else { + LOG_MSG("IMGMOUNT: Perhaps unsupported extension %s", ext); + unsupported_ext = true; + path_no = i; + } } } if (!skipDetectGeometry && !DetectGeometry(NULL, paths[i].c_str(), sizes)) { @@ -6014,6 +6027,11 @@ class IMGMOUNT : public Program { if (unformatted) { if(!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_NOT_FORMATTED")); LOG_MSG("IMGMOUNT: Drive %c not formatted", drive); + } + if (unsupported_ext) { + const char *ext = strrchr(paths[path_no].c_str(), '.'); + if(!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_UNSUPPORTED_EXT"), ext); + LOG_MSG("Unsupported extension %s: Mounted as raw IMG image.", ext); } unsigned char driveIndex = drive-'A'; if (imgDisks.size() == 1 || (imgDisks.size() > 1 && driveIndex < 2 && (swapInDisksSpecificDrive == driveIndex || swapInDisksSpecificDrive == -1))) { @@ -9007,6 +9025,7 @@ void DOS_SetupPrograms(void) { MSG_Add("PROGRAM_MOUNT_STATUS_2","Drive %c is mounted as %s\n"); MSG_Add("PROGRAM_MOUNT_STATUS_1","The currently mounted drives are:\n"); MSG_Add("PROGRAM_MOUNT_NOT_FORMATTED","Drive not formatted. Format it before accessing the drive.\n"); + MSG_Add("PROGRAM_MOUNT_UNSUPPORTED_EXT","Unsupported extension %s: Mounted as raw IMG image.\n"); MSG_Add("PROGRAM_IMGMOUNT_STATUS_FORMAT","%-5s %-47s %-12s %s\n"); MSG_Add("PROGRAM_IMGMOUNT_STATUS_NUMBER_FORMAT","%-12s %-40s %-12s %s\n"); MSG_Add("PROGRAM_IMGMOUNT_STATUS_2","The currently mounted drive numbers are:\n");