2 * PROJECT: ReactOS DiskPart
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/system/diskpart/select.c
5 * PURPOSE: Manages all the partitions of the OS in an interactive way
6 * PROGRAMMERS: Lee Schroeder
14 /* FUNCTIONS ******************************************************************/
27 DPRINT("Select Disk()\n");
31 PrintResourceString(IDS_ERROR_INVALID_ARGS
);
37 if (CurrentDisk
== NULL
)
38 PrintResourceString(IDS_SELECT_NO_DISK
);
40 PrintResourceString(IDS_SELECT_DISK
, CurrentDisk
->DiskNumber
);
44 lValue
= wcstol(argv
[2], &endptr
, 10);
45 if (((lValue
== 0) && (endptr
== argv
[2])) ||
48 PrintResourceString(IDS_ERROR_INVALID_ARGS
);
54 Entry
= DiskListHead
.Flink
;
55 while (Entry
!= &DiskListHead
)
57 DiskEntry
= CONTAINING_RECORD(Entry
, DISKENTRY
, ListEntry
);
59 if (DiskEntry
->DiskNumber
== (ULONG
)lValue
)
61 CurrentDisk
= DiskEntry
;
62 CurrentPartition
= NULL
;
63 PrintResourceString(IDS_SELECT_DISK
, CurrentDisk
->DiskNumber
);
70 PrintResourceString(IDS_SELECT_DISK_INVALID
);
86 DPRINT("Select Partition()\n");
90 PrintResourceString(IDS_ERROR_INVALID_ARGS
);
94 if (CurrentDisk
== NULL
)
96 PrintResourceString(IDS_SELECT_PARTITION_NO_DISK
);
102 if (CurrentPartition
== NULL
)
103 PrintResourceString(IDS_SELECT_NO_PARTITION
);
105 PrintResourceString(IDS_SELECT_PARTITION
, CurrentPartition
);
109 lValue
= wcstol(argv
[2], &endptr
, 10);
110 if (((lValue
== 0) && (endptr
== argv
[2])) ||
113 PrintResourceString(IDS_ERROR_INVALID_ARGS
);
117 Entry
= CurrentDisk
->PrimaryPartListHead
.Flink
;
118 while (Entry
!= &CurrentDisk
->PrimaryPartListHead
)
120 PartEntry
= CONTAINING_RECORD(Entry
, PARTENTRY
, ListEntry
);
122 if (PartEntry
->PartitionType
!= 0)
124 if (PartNumber
== (ULONG
)lValue
)
126 CurrentPartition
= PartEntry
;
127 PrintResourceString(IDS_SELECT_PARTITION
, PartNumber
);
134 Entry
= Entry
->Flink
;
137 Entry
= CurrentDisk
->LogicalPartListHead
.Flink
;
138 while (Entry
!= &CurrentDisk
->LogicalPartListHead
)
140 PartEntry
= CONTAINING_RECORD(Entry
, PARTENTRY
, ListEntry
);
142 if (PartEntry
->PartitionType
!= 0)
144 if (PartNumber
== (ULONG
)lValue
)
146 CurrentPartition
= PartEntry
;
147 PrintResourceString(IDS_SELECT_PARTITION
, PartNumber
);
153 Entry
= Entry
->Flink
;
156 PrintResourceString(IDS_SELECT_PARTITION_INVALID
);
165 /* gets the first word from the string */
168 PrintResourceString(IDS_HELP_CMD_SELECT
);
172 /* determines which to list (disk, partition, etc.) */
173 if (!wcsicmp(argv
[1], L
"disk"))
174 SelectDisk(argc
, argv
);
175 else if (!wcsicmp(argv
[1], L
"partition"))
176 SelectPartition(argc
, argv
);
178 PrintResourceString(IDS_HELP_CMD_SELECT
);