/*++
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;
}