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);