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