https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1b5e679282d4f8bfe6254c233540f2d6de28b353

commit 1b5e679282d4f8bfe6254c233540f2d6de28b353
Author:     Eric Kohl <eric.k...@reactos.org>
AuthorDate: Sun Dec 1 19:33:16 2024 +0100
Commit:     Eric Kohl <eric.k...@reactos.org>
CommitDate: Sun Dec 1 19:33:16 2024 +0100

    [DISKPART] Implement 'select disk system' and 'select disk next'
---
 base/system/diskpart/lang/de-DE.rc |  2 ++
 base/system/diskpart/lang/en-US.rc |  2 ++
 base/system/diskpart/lang/pl-PL.rc |  2 ++
 base/system/diskpart/lang/pt-PT.rc |  2 ++
 base/system/diskpart/lang/ro-RO.rc |  2 ++
 base/system/diskpart/lang/ru-RU.rc |  2 ++
 base/system/diskpart/lang/sq-AL.rc |  2 ++
 base/system/diskpart/lang/tr-TR.rc |  2 ++
 base/system/diskpart/lang/zh-CN.rc |  2 ++
 base/system/diskpart/lang/zh-TW.rc |  2 ++
 base/system/diskpart/resource.h    | 16 +++++----
 base/system/diskpart/select.c      | 74 +++++++++++++++++++++++++++++---------
 12 files changed, 86 insertions(+), 24 deletions(-)

diff --git a/base/system/diskpart/lang/de-DE.rc 
b/base/system/diskpart/lang/de-DE.rc
index f66f0726f18..ea81d8a6a20 100644
--- a/base/system/diskpart/lang/de-DE.rc
+++ b/base/system/diskpart/lang/de-DE.rc
@@ -115,6 +115,8 @@ BEGIN
     IDS_SELECT_NO_DISK "\nThere is no disk currently selected.\nPlease select 
a disk and try again.\n\n"
     IDS_SELECT_DISK "\nDisk %lu is now the selected disk.\n\n"
     IDS_SELECT_DISK_INVALID "\nInvalid disk.\n\n"
+    IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo 
disk ist currently selected.\n\n"
+    IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo 
disk ist currently selected.\n\n"
     IDS_SELECT_NO_PARTITION "\nThere is no partition currently 
selected.\nPlease select a disk and try again.\n\n"
     IDS_SELECT_PARTITION "\nPartition %lu is now the selected partition.\n\n"
     IDS_SELECT_PARTITION_NO_DISK "\nThere is no disk for selecting a 
partition.\nPlease select a disk and try again.\n\n"
diff --git a/base/system/diskpart/lang/en-US.rc 
b/base/system/diskpart/lang/en-US.rc
index c3a00e406ec..c1dedb3b27b 100644
--- a/base/system/diskpart/lang/en-US.rc
+++ b/base/system/diskpart/lang/en-US.rc
@@ -115,6 +115,8 @@ BEGIN
     IDS_SELECT_NO_DISK "\nThere is no disk currently selected.\nPlease select 
a disk and try again.\n\n"
     IDS_SELECT_DISK "\nDisk %lu is now the selected disk.\n\n"
     IDS_SELECT_DISK_INVALID "\nInvalid disk.\n\n"
+    IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo 
disk ist currently selected.\n\n"
+    IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo 
disk ist currently selected.\n\n"
     IDS_SELECT_NO_PARTITION "\nThere is no partition currently 
selected.\nPlease select a disk and try again.\n\n"
     IDS_SELECT_PARTITION "\nPartition %lu is now the selected partition.\n\n"
     IDS_SELECT_PARTITION_NO_DISK "\nThere is no disk for selecting a 
partition.\nPlease select a disk and try again.\n\n"
diff --git a/base/system/diskpart/lang/pl-PL.rc 
b/base/system/diskpart/lang/pl-PL.rc
index e54a1faac37..f3f860f2069 100644
--- a/base/system/diskpart/lang/pl-PL.rc
+++ b/base/system/diskpart/lang/pl-PL.rc
@@ -115,6 +115,8 @@ BEGIN
     IDS_SELECT_NO_DISK "\nNie wybrano dysku.\nWybierz dysk i spróbuj 
ponownie.\n\n"
     IDS_SELECT_DISK "\nObecnie wybranym dyskiem jest dysk %lu.\n\n"
     IDS_SELECT_DISK_INVALID "\nNieprawidłowy dysk.\n\n"
+    IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo 
disk ist currently selected.\n\n"
+    IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo 
disk ist currently selected.\n\n"
     IDS_SELECT_NO_PARTITION "\nNie wybrano partycji.\nWybierz partycję i 
spróbuj ponownie.\n\n"
     IDS_SELECT_PARTITION "\nObecnie wybraną partycją jest partycja %lu.\n\n"
     IDS_SELECT_PARTITION_NO_DISK "\nNie wybrano dysku do ustawienia 
partycji\nWybierz dysk i spróbuj ponownie.\n\n"
diff --git a/base/system/diskpart/lang/pt-PT.rc 
b/base/system/diskpart/lang/pt-PT.rc
index 5d0bfab3ad7..28a64fbaece 100644
--- a/base/system/diskpart/lang/pt-PT.rc
+++ b/base/system/diskpart/lang/pt-PT.rc
@@ -117,6 +117,8 @@ BEGIN
     IDS_SELECT_NO_DISK "\nNenhum disco actualmente está seleccionado.\nPor 
favor seleccione um disco e tente novamente.\n\n"
     IDS_SELECT_DISK "\nDisco %lu é o disco que está actualmente 
seleccionado.\n\n"
     IDS_SELECT_DISK_INVALID "\nDisco inválido.\n\n"
+    IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo 
disk ist currently selected.\n\n"
+    IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo 
disk ist currently selected.\n\n"
     IDS_SELECT_NO_PARTITION "\nNenhuma partição seleccionada actualmente.\nPor 
favor seleccione um disco e tente novamente.\n\n"
     IDS_SELECT_PARTITION "\nPartição %lu é agora a partição seleccionada.\n\n"
     IDS_SELECT_PARTITION_NO_DISK "\nNão há disco para selectionar 
partições.\nPor favor seleccione um disco e tente novamente.\n\n"
diff --git a/base/system/diskpart/lang/ro-RO.rc 
b/base/system/diskpart/lang/ro-RO.rc
index 6f478a8c33c..8c751acbc85 100644
--- a/base/system/diskpart/lang/ro-RO.rc
+++ b/base/system/diskpart/lang/ro-RO.rc
@@ -123,6 +123,8 @@ BEGIN
     IDS_SELECT_NO_DISK "\nMomentan nu există niciun disc selectat.\nSelectați 
un disc apoi reîncercați.\n\n"
     IDS_SELECT_DISK "\nDisul %lu este selectat acum.\n\n"
     IDS_SELECT_DISK_INVALID "\nDisc nevalid.\n\n"
+    IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo 
disk ist currently selected.\n\n"
+    IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo 
disk ist currently selected.\n\n"
     IDS_SELECT_NO_PARTITION "\nMomentan nu există nicio partiție 
selectată.\nSelectați un disc apoi reîncercați.\n\n"
     IDS_SELECT_PARTITION "\nPartiția %lu este selectată acum.\n\n"
     IDS_SELECT_PARTITION_NO_DISK "\nNu există niciun disc pentru partiția 
selectată.\nSelectați un disc apoi reîncercați.\n\n"
diff --git a/base/system/diskpart/lang/ru-RU.rc 
b/base/system/diskpart/lang/ru-RU.rc
index bf9f2182875..d730e8a1768 100644
--- a/base/system/diskpart/lang/ru-RU.rc
+++ b/base/system/diskpart/lang/ru-RU.rc
@@ -117,6 +117,8 @@ BEGIN
     IDS_SELECT_NO_DISK "\nДиск для обработки не указан.\nВыберите диск и 
повторите.\n\n"
     IDS_SELECT_DISK "\nДиск %lu выбран текущим.\n\n"
     IDS_SELECT_DISK_INVALID "\nОшибка диска.\n\n"
+    IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo 
disk ist currently selected.\n\n"
+    IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo 
disk ist currently selected.\n\n"
     IDS_SELECT_NO_PARTITION "\nДиск с разметкой не выбран.\nВыберите диск и 
повторите.\n\n"
     IDS_SELECT_PARTITION "\nВыбрана разметка диска %lu текущей разметкой.\n\n"
     IDS_SELECT_PARTITION_NO_DISK "\nДиск для установки разметки не 
указан.\nВыберите диск и повторите.\n\n"
diff --git a/base/system/diskpart/lang/sq-AL.rc 
b/base/system/diskpart/lang/sq-AL.rc
index 6e1ac5af471..1e397c38dde 100644
--- a/base/system/diskpart/lang/sq-AL.rc
+++ b/base/system/diskpart/lang/sq-AL.rc
@@ -119,6 +119,8 @@ BEGIN
     IDS_SELECT_NO_DISK "\nThere is no disk currently selected.\nPlease select 
a disk and try again.\n\n"
     IDS_SELECT_DISK "\nDisk %lu is now the selected disk.\n\n"
     IDS_SELECT_DISK_INVALID "\nInvalid disk.\n\n"
+    IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo 
disk ist currently selected.\n\n"
+    IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo 
disk ist currently selected.\n\n"
     IDS_SELECT_NO_PARTITION "\nThere is no partition currently 
selected.\nPlease select a disk and try again.\n\n"
     IDS_SELECT_PARTITION "\nPartition %lu is now the selected partition.\n\n"
     IDS_SELECT_PARTITION_NO_DISK "\nThere is no disk for selecting a 
partition.\nPlease select a disk and try again.\n\n"
diff --git a/base/system/diskpart/lang/tr-TR.rc 
b/base/system/diskpart/lang/tr-TR.rc
index 6c9cc76c284..9900743cdc5 100644
--- a/base/system/diskpart/lang/tr-TR.rc
+++ b/base/system/diskpart/lang/tr-TR.rc
@@ -125,6 +125,8 @@ BEGIN
     IDS_SELECT_NO_DISK "\nBir disk seçilmemiş.\nLütfen bir disk seçiniz ve 
yeniden deneyiniz.\n\n"
     IDS_SELECT_DISK "\nDisk %lu şimdi seçilen disktir.\n\n"
     IDS_SELECT_DISK_INVALID "\nGeçersiz disk.\n\n"
+    IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo 
disk ist currently selected.\n\n"
+    IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo 
disk ist currently selected.\n\n"
     IDS_SELECT_NO_PARTITION "\nŞimdilik bir bölüm seçilmemiş.\nLütfen bir disk 
seçiniz ve yeniden deneyiniz.\n\n"
     IDS_SELECT_PARTITION "\nBölüm %lu şimdi seçilen bölümdür.\n\n"
     IDS_SELECT_PARTITION_NO_DISK "\nBir bölüm seçmek için bir disk 
yok.\nLütfen bir disk seçiniz ve yeniden deneyiniz.\n\n"
diff --git a/base/system/diskpart/lang/zh-CN.rc 
b/base/system/diskpart/lang/zh-CN.rc
index 6ede50da37e..c0faf8cd0e0 100644
--- a/base/system/diskpart/lang/zh-CN.rc
+++ b/base/system/diskpart/lang/zh-CN.rc
@@ -124,6 +124,8 @@ BEGIN
     IDS_SELECT_NO_DISK "\n没有当前选择的磁盘。\nP请选择一个磁盘,再试一次。\n\n"
     IDS_SELECT_DISK "\n磁盘 %lu 现在是所选的磁盘。\n\n"
     IDS_SELECT_DISK_INVALID "\n无效的磁盘。\n\n"
+    IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo 
disk ist currently selected.\n\n"
+    IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo 
disk ist currently selected.\n\n"
     IDS_SELECT_NO_PARTITION "\n有是没有当前选定的分区。\n请选择一个磁盘,再试一次。\n\n"
     IDS_SELECT_PARTITION "\n分区 %lu 现在是所选的分区。\n\n"
     IDS_SELECT_PARTITION_NO_DISK "\n没有一个选择是有分区的磁盘。\n请选择一个磁盘,再试一次。\n\n"
diff --git a/base/system/diskpart/lang/zh-TW.rc 
b/base/system/diskpart/lang/zh-TW.rc
index b0078872817..ca23054e1f8 100644
--- a/base/system/diskpart/lang/zh-TW.rc
+++ b/base/system/diskpart/lang/zh-TW.rc
@@ -124,6 +124,8 @@ BEGIN
     IDS_SELECT_NO_DISK "\n目前沒有選擇磁碟。\n請選擇一個磁碟,然後再試一次。\n\n"
     IDS_SELECT_DISK "\n磁碟 %lu 現在是所選擇的磁碟。\n\n"
     IDS_SELECT_DISK_INVALID "\n無效的磁碟。\n\n"
+    IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo 
disk ist currently selected.\n\n"
+    IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo 
disk ist currently selected.\n\n"
     IDS_SELECT_NO_PARTITION "\n目前選擇的磁碟沒有磁碟分割。\n請選擇一個磁碟,然後再試一次。\n\n"
     IDS_SELECT_PARTITION "\n磁碟分割 %lu 現在是所選擇的磁碟分割。\n\n"
     IDS_SELECT_PARTITION_NO_DISK "\n沒有選擇要設定磁碟分割的磁碟。\n請選擇一個磁碟,然後再試一次。\n\n"
diff --git a/base/system/diskpart/resource.h b/base/system/diskpart/resource.h
index 5b776a324d5..f44f706fad6 100644
--- a/base/system/diskpart/resource.h
+++ b/base/system/diskpart/resource.h
@@ -85,13 +85,15 @@
 #define IDS_SELECT_NO_DISK             4400
 #define IDS_SELECT_DISK                4401
 #define IDS_SELECT_DISK_INVALID        4402
-#define IDS_SELECT_NO_PARTITION        4403
-#define IDS_SELECT_PARTITION           4404
-#define IDS_SELECT_PARTITION_NO_DISK   4405
-#define IDS_SELECT_PARTITION_INVALID   4406
-#define IDS_SELECT_NO_VOLUME           4407
-#define IDS_SELECT_VOLUME              4408
-#define IDS_SELECT_VOLUME_INVALID      4409
+#define IDS_SELECT_DISK_ENUM_NO_START  4403
+#define IDS_SELECT_DISK_ENUM_FINISHED  4404
+#define IDS_SELECT_NO_PARTITION        4405
+#define IDS_SELECT_PARTITION           4406
+#define IDS_SELECT_PARTITION_NO_DISK   4407
+#define IDS_SELECT_PARTITION_INVALID   4408
+#define IDS_SELECT_NO_VOLUME           4409
+#define IDS_SELECT_VOLUME              4410
+#define IDS_SELECT_VOLUME_INVALID      4411
 
 #define IDS_SETID_FAIL                 4450
 #define IDS_SETID_SUCCESS              4451
diff --git a/base/system/diskpart/select.c b/base/system/diskpart/select.c
index dcc9adb8f0d..aa39ae6bb9a 100644
--- a/base/system/diskpart/select.c
+++ b/base/system/diskpart/select.c
@@ -39,35 +39,75 @@ SelectDisk(
         return TRUE;
     }
 
-    if (!IsDecString(argv[2]))
+    if (!_wcsicmp(argv[2], L"system"))
     {
-        ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS);
-        return TRUE;
-    }
+        CurrentDisk = NULL;
 
-    ulValue = wcstoul(argv[2], NULL, 10);
-    if ((ulValue == 0) && (errno == ERANGE))
-    {
-        ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS);
+        Entry = DiskListHead.Flink;
+        DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry);
+
+        CurrentDisk = DiskEntry;
+        CurrentPartition = NULL;
+        ConResPrintf(StdOut, IDS_SELECT_DISK, CurrentDisk->DiskNumber);
         return TRUE;
     }
+    else if (!_wcsicmp(argv[2], L"next"))
+    {
+        if (CurrentDisk == NULL)
+        {
+            CurrentPartition = NULL;
+            ConResPuts(StdErr, IDS_SELECT_DISK_ENUM_NO_START);
+            return TRUE;
+        }
+
+        if (CurrentDisk->ListEntry.Flink == &DiskListHead)
+        {
+            CurrentDisk = NULL;
+            CurrentPartition = NULL;
+            ConResPuts(StdErr, IDS_SELECT_DISK_ENUM_FINISHED);
+            return TRUE;
+        }
 
-    CurrentDisk = NULL;
+        Entry = CurrentDisk->ListEntry.Flink;
 
-    Entry = DiskListHead.Flink;
-    while (Entry != &DiskListHead)
-    {
         DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry);
 
-        if (DiskEntry->DiskNumber == ulValue)
+        CurrentDisk = DiskEntry;
+        CurrentPartition = NULL;
+        ConResPrintf(StdOut, IDS_SELECT_DISK, CurrentDisk->DiskNumber);
+        return TRUE;
+    }
+    else if (IsDecString(argv[2]))
+    {
+        ulValue = wcstoul(argv[2], NULL, 10);
+        if ((ulValue == 0) && (errno == ERANGE))
         {
-            CurrentDisk = DiskEntry;
-            CurrentPartition = NULL;
-            ConResPrintf(StdOut, IDS_SELECT_DISK, CurrentDisk->DiskNumber);
+            ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS);
             return TRUE;
         }
 
-        Entry = Entry->Flink;
+        CurrentDisk = NULL;
+
+        Entry = DiskListHead.Flink;
+        while (Entry != &DiskListHead)
+        {
+            DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry);
+
+            if (DiskEntry->DiskNumber == ulValue)
+            {
+                CurrentDisk = DiskEntry;
+                CurrentPartition = NULL;
+                ConResPrintf(StdOut, IDS_SELECT_DISK, CurrentDisk->DiskNumber);
+                return TRUE;
+            }
+
+            Entry = Entry->Flink;
+        }
+    }
+    else
+    {
+        ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS);
+        return TRUE;
     }
 
     ConResPuts(StdErr, IDS_SELECT_DISK_INVALID);

Reply via email to