https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1b5e679282d4f8bfe6254…
commit 1b5e679282d4f8bfe6254c233540f2d6de28b353
Author: Eric Kohl <eric.kohl(a)reactos.org>
AuthorDate: Sun Dec 1 19:33:16 2024 +0100
Commit: Eric Kohl <eric.kohl(a)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);