summaryrefslogblamecommitdiffstats
path: root/private/ntos/arcinst/arcinst.c
blob: 7e81de0f3aa5de3c296dc8b8c2862d58c0c62cbf (plain) (tree)









































































































































































































































                                                                                               
/*++

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;
}