mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
234 lines
4.7 KiB
234 lines
4.7 KiB
/*++
|
|
|
|
Copyright (c) 1991-1996 Microsoft Corporation
|
|
Copyright (c) 1992, 1992 Digital Equipment Corporation
|
|
|
|
Module Name:
|
|
|
|
arcinst.c
|
|
|
|
Abstract:
|
|
|
|
This module contains the code that prepares a ARC compliant platform
|
|
for OS installation. It creates system partitions and formats system
|
|
partitions
|
|
|
|
--*/
|
|
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
|
|
PCHAR Banner1 = " Arc Installation Program Version 4.00";
|
|
PCHAR Banner2 = " Copyright (c) 1991-1996 Microsoft Corporation";
|
|
|
|
//
|
|
// Menu definitions
|
|
//
|
|
|
|
PCHAR rgszMainMenu[] = {
|
|
"Configure Partitions",
|
|
"Exit"
|
|
|
|
};
|
|
|
|
|
|
//
|
|
// NOTE! This must be the number of entries in rgszMainMenu. It is used
|
|
// to tell AddMenuItems the number of menu items to add.
|
|
//
|
|
|
|
#define CSZMENUITEMS 2
|
|
|
|
|
|
//
|
|
// NOTE! These must be kept in sync with the indices for rgszMainMenu
|
|
// The main menu is created by AddMenuItems which will generated
|
|
// associated data values based upon the index into the array of
|
|
// strings passed in. These #defines must match those values
|
|
// or the switch statement used to handle the menu selection will
|
|
// dispatch to the wrong code.
|
|
//
|
|
|
|
#define CONFIG_SYS_PARTITION 0
|
|
#define EXIT 1
|
|
|
|
#define MENU_START_ROW 4
|
|
#define ERROR_ROW_TOP 13
|
|
#define ERROR_ROW_BOTTOM 16
|
|
|
|
//
|
|
// Max size for a path or environment variable
|
|
//
|
|
|
|
#define MAX_PATH 256
|
|
|
|
//
|
|
// Max bytes in a line
|
|
//
|
|
|
|
#define CBMAXLINE 120
|
|
|
|
//
|
|
// Define constants to generate a 2 meg stack and a 2 meg heap.
|
|
//
|
|
#define ARCINST_STACK_PAGES (2*1024*1024 / PAGE_SIZE)
|
|
#define ARCINST_HEAP_PAGES (2*1024*1024 / PAGE_SIZE)
|
|
|
|
ARC_STATUS GetTitlesAndPaths ( PCHAR, PCHAR, ULONG, ULONG, PCHAR **,PULONG, PCHAR **, PULONG);
|
|
ARC_STATUS GetSectionElementList ( PCHAR, PCHAR, ULONG, PCHAR **, PULONG );
|
|
ARC_STATUS CopySection( PCHAR, PCHAR, PCHAR, PCHAR );
|
|
ARC_STATUS UpdateOSFiles( PCHAR, PCHAR, PCHAR );
|
|
|
|
VOID PrintError( PCHAR, ... );
|
|
|
|
// Needed for C string functions
|
|
int errno;
|
|
|
|
ARC_STATUS __cdecl
|
|
main(
|
|
IN ULONG argc,
|
|
IN PCHAR argv[],
|
|
IN PCHAR envp[]
|
|
)
|
|
{
|
|
PCHAR szSysPartition = NULL;
|
|
PCHAR szInfPath = NULL;
|
|
PVOID hdMenuId;
|
|
ULONG MenuChoice;
|
|
|
|
DBG_UNREFERENCED_PARAMETER( argc );
|
|
DBG_UNREFERENCED_PARAMETER( argv );
|
|
DBG_UNREFERENCED_PARAMETER( envp );
|
|
|
|
if (AlMemoryInitialize (ARCINST_STACK_PAGES, ARCINST_HEAP_PAGES) != ESUCCESS) {
|
|
|
|
PrintError(NULL, "Failed to initialize the heap");
|
|
return( ESUCCESS );
|
|
}
|
|
|
|
if (!AlInitializeMenuPackage()) {
|
|
|
|
PrintError(NULL, "Could not initialize menu package");
|
|
return( ESUCCESS );
|
|
|
|
}
|
|
|
|
if (FdiskInitialize() != ESUCCESS) {
|
|
|
|
PrintError(NULL, "Failed to initialize the FDISK package");
|
|
return( ESUCCESS );
|
|
|
|
}
|
|
|
|
if (!AlNewMenu(&hdMenuId)) {
|
|
|
|
PrintError(NULL, "Could not create main menu");
|
|
return( ESUCCESS );
|
|
|
|
}
|
|
|
|
//
|
|
// Initialize the main ArcInst menu.
|
|
//
|
|
// Not that when you add items in this way the associated data becomes
|
|
// the index in the array of strings. Make sure the values used for
|
|
// associated data the predefined values CHANGE_ENV etc.
|
|
//
|
|
|
|
if (!AlAddMenuItems(hdMenuId, rgszMainMenu, CSZMENUITEMS)) {
|
|
|
|
PrintError(NULL, "Failed to Initialize Main Menu");
|
|
return( ESUCCESS );
|
|
}
|
|
|
|
//
|
|
// Loop till Exit or an ESC key is it.
|
|
//
|
|
while (TRUE) {
|
|
|
|
//
|
|
// Print Banner
|
|
//
|
|
AlClearScreen();
|
|
AlSetPosition(1, 0);
|
|
AlPrint(Banner1);
|
|
AlPrint("\r\n");
|
|
AlPrint(Banner2);
|
|
|
|
if (!AlDisplayMenu(hdMenuId,
|
|
FALSE,
|
|
CONFIG_SYS_PARTITION,
|
|
&MenuChoice,
|
|
MENU_START_ROW,
|
|
0)) {
|
|
|
|
//
|
|
// User hit ESC key
|
|
//
|
|
return( ESUCCESS );
|
|
|
|
}
|
|
|
|
switch (MenuChoice) {
|
|
|
|
case CONFIG_SYS_PARTITION:
|
|
|
|
ConfigureSystemPartitions();
|
|
break;
|
|
|
|
case EXIT:
|
|
|
|
return(ESUCCESS);
|
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
VOID
|
|
PrintError(
|
|
IN PCHAR szFormat,
|
|
...
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine prints a error or information message at a specific
|
|
location the screen (ERROR_ROW_TOP) and waits for the user to hit
|
|
any key.
|
|
|
|
Arguments:
|
|
|
|
szFormat - Format string, if NULL then "%s" is used.
|
|
szErrorMessage - Text of string to print
|
|
|
|
Return Value:
|
|
|
|
none
|
|
|
|
--*/
|
|
|
|
{
|
|
va_list ArgList;
|
|
|
|
va_start(ArgList,szFormat);
|
|
if (szFormat == NULL ) {
|
|
szFormat = "%s";
|
|
}
|
|
vAlStatusMsg(ERROR_ROW_TOP, TRUE, szFormat, ArgList);
|
|
|
|
AlWaitKey(NULL);
|
|
AlClearStatusArea(ERROR_ROW_TOP, ERROR_ROW_BOTTOM);
|
|
}
|
|
|
|
VOID
|
|
JzShowTime (
|
|
BOOLEAN First
|
|
)
|
|
{
|
|
return;
|
|
}
|