windows-nt/Source/XPSP1/NT/base/ntsetup/mpk/misclib/partsel.c

156 lines
2.7 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
partsel.c
Abstract:
Routine to allow the user to select a partition
from a list of partitions. The UI is a simple character-based
deal.
Author:
Ted Miller (tedm) 29-May-1997
Revision History:
--*/
#include <mytypes.h>
#include <misclib.h>
#include <partio.h>
#include <diskio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
INT
_far
SelectPartition(
IN UINT PartitionCount,
IN CHAR *Prompt,
OUT CHAR *AlternateResponse, OPTIONAL
IN FPCHAR textDisk,
IN FPCHAR textPaddedMbCount,
IN FPCHAR textInvalidSelection
)
{
UINT i,l;
UINT DiskId;
BYTE SysId;
ULONG StartSector;
ULONG SectorCount;
BYTE Int13Unit;
BYTE SectorsPerTrack;
USHORT Heads;
USHORT Cylinders;
ULONG ExtendedSectorCount;
UINT Selection;
CHAR line[256];
select:
printf("\n\n");
for(i=0; i<PartitionCount; i++) {
printf("%2u) ",i+1);
GetPartitionInfoById(
i,
0,
&DiskId,
&SysId,
&StartSector,
&SectorCount
);
GetDiskInfoById(
DiskId,
0,
&Int13Unit,
&SectorsPerTrack,
&Heads,
&Cylinders,
&ExtendedSectorCount
);
printf(" ");
if(Int13Unit) {
printf(textDisk);
printf(" ");
printf("%2x",Int13Unit);
} else {
l = strlen(textDisk) + 3;
while(l) {
printf(" ");
l--;
}
}
printf(" ");
switch(SysId) {
case 1:
printf(" FAT12 ");
break;
case 4:
printf(" FAT16 ");
break;
case 6:
printf("BIGFAT ");
break;
case 7:
printf(" NTFS ");
break;
case 0xb:
printf(" FAT32 ");
break;
case 0xc:
printf("XFAT32 ");
break;
case 0xe:
printf("XINT13 ");
break;
default:
printf(" ");
break;
}
printf(" ");
printf(textPaddedMbCount,SectorCount / 2048);
printf("\n");
}
printf("\n");
printf(Prompt);
printf(" ");
gets(line);
Selection = atoi(line);
if(!Selection || (Selection > PartitionCount)) {
if(AlternateResponse) {
Selection = 0;
strcpy(AlternateResponse,line);
} else {
printf("\n%s\n\n",textInvalidSelection);
goto select;
}
}
return(Selection-1);
}