+++ /dev/null
-/*
- * PROJECT: ReactOS DiskPart
- * LICENSE: GPL - See COPYING in the top level directory
- * FILE: base/system/diskpart/select.c
- * PURPOSE: Manages all the partitions of the OS in an interactive way.
- * PROGRAMMERS: Lee Schroeder
- */
-
-#include "diskpart.h"
-
-#define NDEBUG
-#include <debug.h>
-
-/* FUNCTIONS ******************************************************************/
-
-static
-VOID
-SelectDisk(
- INT argc,
- LPWSTR *argv)
-{
- PLIST_ENTRY Entry;
- PDISKENTRY DiskEntry;
- LONG lValue;
- LPWSTR endptr = NULL;
-
- DPRINT("Select Disk()\n");
-
- if (argc > 3)
- {
- ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS);
- return;
- }
-
- if (argc == 2)
- {
- if (CurrentDisk == NULL)
- ConResPuts(StdOut, IDS_SELECT_NO_DISK);
- else
- ConResPrintf(StdOut, IDS_SELECT_DISK, CurrentDisk->DiskNumber);
- return;
- }
-
- lValue = wcstol(argv[2], &endptr, 10);
- if (((lValue == 0) && (endptr == argv[2])) ||
- (lValue < 0))
- {
- ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS);
- return;
- }
-
- CurrentDisk = NULL;
-
- Entry = DiskListHead.Flink;
- while (Entry != &DiskListHead)
- {
- DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry);
-
- if (DiskEntry->DiskNumber == (ULONG)lValue)
- {
- CurrentDisk = DiskEntry;
- CurrentPartition = NULL;
- ConResPrintf(StdOut, IDS_SELECT_DISK, CurrentDisk->DiskNumber);
- return;
- }
-
- Entry = Entry->Flink;
- }
-
- ConResPuts(StdErr, IDS_SELECT_DISK_INVALID);
-}
-
-
-static
-VOID
-SelectPartition(
- INT argc,
- LPWSTR *argv)
-{
- PLIST_ENTRY Entry;
- PPARTENTRY PartEntry;
- LONG lValue;
- LPWSTR endptr = NULL;
- ULONG PartNumber = 1;
-
- DPRINT("Select Partition()\n");
-
- if (argc > 3)
- {
- ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS);
- return;
- }
-
- if (CurrentDisk == NULL)
- {
- ConResPuts(StdOut, IDS_SELECT_PARTITION_NO_DISK);
- return;
- }
-
- if (argc == 2)
- {
- if (CurrentPartition == NULL)
- ConResPuts(StdOut, IDS_SELECT_NO_PARTITION);
- else
- ConResPrintf(StdOut, IDS_SELECT_PARTITION, CurrentPartition);
- return;
- }
-
- lValue = wcstol(argv[2], &endptr, 10);
- if (((lValue == 0) && (endptr == argv[2])) ||
- (lValue < 0))
- {
- ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS);
- return;
- }
-
- Entry = CurrentDisk->PrimaryPartListHead.Flink;
- while (Entry != &CurrentDisk->PrimaryPartListHead)
- {
- PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry);
-
- if (PartEntry->PartitionType != 0)
- {
- if (PartNumber == (ULONG)lValue)
- {
- CurrentPartition = PartEntry;
- ConResPrintf(StdOut, IDS_SELECT_PARTITION, PartNumber);
- return;
- }
-
- PartNumber++;
- }
-
- Entry = Entry->Flink;
- }
-
- Entry = CurrentDisk->LogicalPartListHead.Flink;
- while (Entry != &CurrentDisk->LogicalPartListHead)
- {
- PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry);
-
- if (PartEntry->PartitionType != 0)
- {
- if (PartNumber == (ULONG)lValue)
- {
- CurrentPartition = PartEntry;
- ConResPrintf(StdOut, IDS_SELECT_PARTITION, PartNumber);
- return;
- }
-
- PartNumber++;
- }
- Entry = Entry->Flink;
- }
-
- ConResPuts(StdErr, IDS_SELECT_PARTITION_INVALID);
-}
-
-
-BOOL
-select_main(
- INT argc,
- LPWSTR *argv)
-{
- /* gets the first word from the string */
- if (argc == 1)
- {
- ConResPuts(StdOut, IDS_HELP_CMD_SELECT);
- return TRUE;
- }
-
- /* determines which to list (disk, partition, etc.) */
- if (!wcsicmp(argv[1], L"disk"))
- SelectDisk(argc, argv);
- else if (!wcsicmp(argv[1], L"partition"))
- SelectPartition(argc, argv);
- else
- ConResPuts(StdOut, IDS_HELP_CMD_SELECT);
-
- return TRUE;
-}