|
|
/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
dos2nt.h
Abstract:
Local include file for DOS based NT Setup program.
Author:
Ted Miller (tedm) 30-March-1992
Revision History:
--*/
#include <setupbat.h>
#include "nttypes.h"
#include <stdio.h>
#include "dninf.h"
#include "sptxtcns.h"
#include <stdarg.h>
#include "SetupSxs.h"
//
// Define structure used to hold a text screen.
//
typedef struct _SCREEN { UCHAR X; UCHAR Y; PCHAR Strings[]; } SCREEN, *PSCREEN;
//
// Define structure that contains information about disk space requirements
//
typedef struct _SPACE_REQUIREMENT { PCHAR Key; unsigned ClusterSize; ULONG Clusters; } SPACE_REQUIREMENT, *PSPACE_REQUIREMENT;
//
// define virtualized keycodes
//
#define ASCI_BS 8
#define ASCI_CR 13
#define ASCI_ESC 27
#define DN_KEY_UP 0x00010000
#define DN_KEY_DOWN 0x00020000
#define DN_KEY_HOME 0x00030000
#define DN_KEY_END 0x00040000
#define DN_KEY_PAGEUP 0x00050000
#define DN_KEY_PAGEDOWN 0x00060000
#define DN_KEY_F1 0x01000000
#define DN_KEY_F2 0x02000000
#define DN_KEY_F3 0x03000000
#define DN_KEY_F4 0x04000000
//
// define characters for radio buttons
//
#define RADIO_ON ((CHAR)'X')
#define RADIO_OFF ((CHAR)' ')
//
// Display functions
//
VOID DnInitializeDisplay( VOID );
VOID DnClearClientArea( VOID );
VOID DnSetGaugeAttribute( IN BOOLEAN Set );
VOID DnPositionCursor( IN UCHAR X, IN UCHAR Y );
VOID DnWriteChar( IN CHAR chr );
VOID DnWriteString( IN PCHAR String );
VOID DnWriteStatusText( IN PCHAR FormatString OPTIONAL, ... );
VOID DnSetCopyStatusText( IN PCHAR Caption, IN PCHAR Filename );
VOID DnStartEditField( IN BOOLEAN CreateField, IN UCHAR X, IN UCHAR Y, IN UCHAR W );
VOID DnExitDialog( VOID );
VOID DnDelnode( IN PCHAR Directory );
//
// Gas guage functions
//
int DnGetGaugeChar( VOID );
VOID DnInitGauge( IN unsigned NumberOfFiles, IN PSCREEN AdditionalScreen OPTIONAL );
VOID DnTickGauge( VOID );
VOID DnDrawGauge( IN PSCREEN AdditionalScreen OPTIONAL );
//
// asm routines in dna.asm
//
VOID DnaReboot( VOID );
BOOLEAN _far _cdecl DnAbsoluteSectorIo( IN unsigned Drive, //0=A, etc
IN ULONG StartSector, IN USHORT SectorCount, IN OUT PVOID Buffer, IN BOOLEAN Write );
//
// Misc / util functions
//
BOOLEAN DnWriteSmallIniFile( IN PCHAR Filename, IN PCHAR *Lines, OUT FILE **FileHandle OPTIONAL );
ULONG DnGetKey( VOID );
ULONG DnGetValidKey( IN PULONG ValidKeyList );
VOID DnDisplayScreen( IN PSCREEN Screen, ... );
VOID vDnDisplayScreen( IN PSCREEN Screen, IN va_list arglist );
VOID DnFatalError( IN PSCREEN Screen, ... );
BOOLEAN DnCopyError( IN PCHAR Filename, IN PSCREEN ErrorScreen, IN int FilenameLine );
PCHAR DnDupString( IN PCHAR String );
VOID DnGetString( IN OUT PCHAR String, IN UCHAR X, IN UCHAR Y, IN UCHAR W );
BOOLEAN DnIsDriveValid( IN unsigned Drive );
BOOLEAN DnIsDriveRemote( IN unsigned Drive, OUT PCHAR UncPath OPTIONAL );
BOOLEAN DnIsDriveRemovable( IN unsigned Drive );
BOOLEAN DnCanonicalizePath( IN PCHAR PathIn, OUT PCHAR PathOut );
VOID DnRemoveTrailingSlashes( PCHAR Path );
VOID DnRemoveLastPathElement( PCHAR Path );
VOID DnpConcatPaths( IN PCHAR SourceBuffer, IN PCHAR AppendString );
BOOLEAN DnIsDriveCompressedVolume( IN unsigned Drive, OUT unsigned *HostDrive );
#if 1
PVOID Malloc( IN unsigned Size, IN BOOLEAN MustSucceed #if DBG
,IN char *file, IN int line #endif
);
VOID Free( IN PVOID Block #if DBG
,IN char *file, IN int line #endif
);
PVOID Realloc( IN PVOID Block, IN unsigned Size, IN BOOLEAN MustSucceed #if DBG
,IN char *file, IN int line #endif
);
#if DBG
#define MALLOC(s,f) Malloc(s,f,__FILE__,__LINE__)
#define REALLOC(b,s,f) Realloc(b,s,f,__FILE__,__LINE__)
#define FREE(b) Free(b,__FILE__,__LINE__)
#else
#define MALLOC(s,f) Malloc(s,f)
#define REALLOC(b,s,f) Realloc(b,s,f)
#define FREE(b) Free(b)
#endif
#else
#include <malloc.h>
#define MALLOC(s,f) malloc(s)
#define REALLOC(b,s,f) realloc(b,s)
#define FREE(b) free(b)
#endif
VOID DnExit( IN int ExitStatus );
//
// File copy routines
//
//
// Flags for various routines
//
#define CPY_VALIDATION_PASS 0x0001
#define CPY_USE_DEST_ROOT 0x0002
#define CPY_VERIFY 0x0004
#define CPY_PRESERVE_ATTRIBS 0x0008
#define CPY_PRESERVE_NAME 0x0010
#define CPY_PRUNE_DRIVERCAB 0x0020
VOID DnCopyFiles( VOID );
ULONG DnpIterateOptionalDirs( IN unsigned Flags, IN unsigned ClusterSize OPTIONAL, IN PSPACE_REQUIREMENT SpaceReqArray OPTIONAL, IN unsigned ArraySize OPTIONAL );
VOID DnCopyFloppyFiles( IN PCHAR SectionName, IN PCHAR TargetRoot );
VOID DnCopyFilesInSection( IN unsigned Flags, IN PCHAR SectionName, IN PCHAR SourcePath, IN PCHAR TargetPath );
#if NEC_98
VOID DnCopyFilesInSectionForFDless( IN PCHAR SectionName, IN PCHAR SourcePath, IN PCHAR TargetPath ); #endif // NEC_98
VOID DnCopyOemBootFiles( PCHAR TargetPath );
VOID DnDetermineSpaceRequirements( PSPACE_REQUIREMENT SpaceReqArray, unsigned ArraySize );
VOID DnAdjustSpaceRequirements( PSPACE_REQUIREMENT SpaceReqArray, unsigned ArraySize );
//
// Local source functions.
//
VOID DnRemoveLocalSourceTrees( VOID );
VOID DnRemovePagingFiles( VOID );
//
// Function to create the setup boot floppy
//
VOID DnCreateBootFloppies( VOID );
//
// Function to start NT text mode setup
//
VOID DnToNtSetup( VOID );
//
// Global variables
//
extern PCHAR LocalSourceDirName; // name of local src root (\$WIN_NT$.~LS)
extern PCHAR x86DirName; // name of x86-specific subdir (\I386")
extern PCHAR DngSourceRootPath; // root of source ('x:\foo\bar', '\\foo\bar')
extern PCHAR UserSpecifiedOEMShare; // possible alternate location for $OEM$ files.
extern CHAR DngTargetDriveLetter; // drive letter of target
extern CHAR DngSwapDriveLetter; // drive letter for INF parser swap file
extern PCHAR DngTargetPath; // path part of target from leading \.
extern PVOID DngInfHandle; // To be passed to INF routines
extern PVOID DngDrvindexInfHandle; // To be passed to INF routines
extern BOOLEAN DngFloppyVerify; // whether to verify files copied to floppy
extern BOOLEAN DngWinntFloppies; // whether floppies are for winnt or cd/floppy
extern BOOLEAN DngCheckFloppySpace; // whether to check free space on the floppy
extern unsigned DngOriginalCurrentDrive; // current drive when we were invoked
extern BOOLEAN DngFloppyless; // whether to do floppyless operation
extern BOOLEAN DngServer; // true if setting up server; false for workstation
extern BOOLEAN DngUnattended; // skip final reboot screen
extern BOOLEAN DngWindows; // Are we running under Windows?
extern BOOLEAN DngCopyOnlyD1TaggedFiles; // TRUE if the files tagged with d1 only need to be copied
extern PCHAR DngScriptFile; extern BOOLEAN DngOemPreInstall; extern PCHAR OemSystemDirectory; extern PCHAR OemOptionalDirectory;
extern PCHAR UniquenessDatabaseFile; extern PCHAR UniquenessId;
extern BOOLEAN DngMagnifier; // Accessibility utilities
extern BOOLEAN DngKeyboard; extern BOOLEAN DngTalker; extern BOOLEAN DngVoice;
//
// Name of sections and keys in inf file.
//
extern CHAR __far DnfDirectories[]; extern CHAR __far DnfFiles[]; extern CHAR __far DnfFloppyFiles0[]; extern CHAR __far DnfFloppyFiles1[]; extern CHAR __far DnfFloppyFiles2[]; extern CHAR __far DnfFloppyFiles3[]; extern CHAR __far DnfFloppyFilesX[]; extern CHAR __far DnfSpaceRequirements[]; extern CHAR __far DnfMiscellaneous[]; extern CHAR __far DnfRootBootFiles[]; extern CHAR __far DnfAssemblyDirectories[];
#if NEC_98
extern CHAR DnfBackupFiles_PC98[]; // For FD Less Setup
#endif // NEC_98
extern CHAR DnkBootDrive[]; extern CHAR DnkNtDrive[]; extern CHAR __far DnkMinimumMemory[];
//
// Text strings
//
extern CHAR __far DntMsWindows[]; // "Microsoft Windows"
extern CHAR __far DntMsDos[]; // "MS-DOS"
extern CHAR __far DntPcDos[]; // "PC-DOS"
extern CHAR __far DntOs2[]; // "OS/2"
extern CHAR __far DntPreviousOs[]; // "Previous Operating System on C:"
extern CHAR __far DntBootIniLine[]; // "Windows NT 3.5 Installation/Upgrade"
extern CHAR __far DntEmptyString[]; // ""
extern CHAR __far DntStandardHeader[]; extern CHAR __far DntPersonalHeader[]; extern CHAR __far DntServerHeader[]; extern CHAR __far DntWorkstationHeader[]; extern CHAR DntParsingArgs[]; // "Parsing arguments..."
extern CHAR __far DntEnterEqualsExit[]; extern CHAR __far DntEnterEqualsRetry[]; extern CHAR __far DntEscEqualsSkipFile[]; extern CHAR __far DntEnterEqualsContinue[]; extern CHAR __far DntPressEnterToExit[]; extern CHAR __far DntF3EqualsExit[]; // "F3=Exit"
extern CHAR __far DntReadingInf[]; // "Reading INF file..."
extern CHAR __far DntCopying[]; // "� Copying: "
extern CHAR __far DntVerifying[]; // "� Verifying: "
extern CHAR DntCheckingDiskSpace[]; // "Checking disk space..."
extern CHAR __far DntConfiguringFloppy[]; // "Configuring floppy disk..."
extern CHAR __far DntWritingData[]; // "Writing Setup parameters...";
extern CHAR __far DntPreparingData[]; // "Determining Setup parameters...";
extern CHAR __far DntFlushingData[]; // "Ensuring disk consistency..."
extern CHAR __far DntInspectingComputer[]; // "Inspecting computer..."
extern CHAR __far DntOpeningInfFile[]; // "Opening INF file..."
extern CHAR __far DntRemovingFile[]; // "Removing file %s"
extern CHAR DntXEqualsRemoveFiles[]; // "X=Remove files"
extern CHAR __far DntXEqualsSkipFile[]; // "X=Skip File"
extern ULONG DniAccelRemove1,DniAccelRemove2; extern ULONG DniAccelSkip1,DniAccelSkip2;
extern PCHAR __far DntUsage[]; extern PCHAR __far DntUsageNoSlashD[];
//
// Screens
//
extern SCREEN DnsOutOfMemory; extern SCREEN DnsAccessibilityOptions; // choose accessibility utilities
extern SCREEN DnsNoShareGiven; // user did not give a sharepoint
extern SCREEN DnsBadSource; // user specified a bad source
extern SCREEN DnsBadInf; // inf file is bad or couldn't read it
extern SCREEN DnsBadLocalSrcDrive; // local source drive on cmd line is bad
extern SCREEN DnsNoLocalSrcDrives; // no drives suitable for local source
extern SCREEN DnsNoSpaceOnSyspart; // not enough space for floppyless operation
extern SCREEN DnsCantCreateDir; // couldn't create directory.
extern SCREEN DnsBadInfSection; // inf section is bad
extern SCREEN DnsCopyError; // error copying a file
extern SCREEN DnsVerifyError; // copy of file didn't match original
extern SCREEN DnsWaitCopying; // wait while setup copies files...
extern SCREEN DnsWaitCopyFlop; // wait while setup copies files...
extern SCREEN DnsWaitCleanup; // wait while setup cleans up...
extern SCREEN DnsNeedFloppyDisk0_0; // prompt user to insert a blank floppy
extern SCREEN DnsNeedSFloppyDsk0_0; // prompt user to insert a blank floppy
extern SCREEN DnsNeedFloppyDisk1_0; // prompt user to insert a blank floppy
extern SCREEN DnsNeedFloppyDisk2_0; // prompt user to insert a blank floppy
extern SCREEN DnsNeedFloppyDisk3_0; // prompt user to insert a blank floppy
extern SCREEN DnsNeedFloppyDisk3_1; // prompt user to insert a blank floppy
extern SCREEN DnsNeedSFloppyDsk1_0; // prompt user to insert a blank floppy
extern SCREEN DnsNeedSFloppyDsk2_0; // prompt user to insert a blank floppy
extern SCREEN DnsNeedSFloppyDsk3_0; // prompt user to insert a blank floppy
extern SCREEN DnsNeedSFloppyDsk3_1; // prompt user to insert a blank floppy
extern SCREEN DnsFloppyNotFormatted;// floppy appears to not be formatted
extern SCREEN DnsFloppyCantGetSpace;// can't determine free space on the floppy
extern SCREEN DnsFloppyNotBlank; // not enough free space on the floppy
extern SCREEN DnsFloppyWriteBS; // couldn't write floppy's boot sector
extern SCREEN DnsFloppyVerifyBS; // readback of sector 0 failed or no match
extern SCREEN DnsFloppyBadFormat; // sanity check of bpb failed
extern SCREEN DnsCantWriteFloppy; // couldn't append to txtsetup.inf
extern SCREEN DnsExitDialog; // exit confirmation
extern SCREEN DnsAboutToRebootS; // about to reboot machine (server)
extern SCREEN DnsAboutToRebootW; // about to reboot machine (workstation)
extern SCREEN DnsAboutToRebootX; // about to reboot machine (floppyless)
extern SCREEN DnsAboutToExitS; // about to exit winnt (server)
extern SCREEN DnsAboutToExitW; // about to exit winnt (workstation)
extern SCREEN DnsAboutToExitX; // about to exit winnt (floppyless)
extern SCREEN DnsConfirmRemoveNt; // confirm remove nt files
extern SCREEN DnsCantOpenLogFile; // Can't open setup.log
extern SCREEN DnsLogFileCorrupt; // Log file missing [Repair.WinntFiles]
extern SCREEN DnsRemovingNtFiles; // removing windows nt files.
extern SCREEN DnsSureSkipFile; // confirm skip file on copy error.
extern SCREEN DnsGauge; // gas gauge
extern SCREEN DnsBadDosVersion; // DOS version < 3.0
extern SCREEN DnsRequiresFloppy; // no 1.2 meg or greater floppy at a:
extern SCREEN DnsRequires486; // not 80486 or greater
extern SCREEN DnsNotEnoughMemory; // insufficient memory
extern SCREEN DnsCantRunOnNt; // can't run on windows nt
extern SCREEN DnsNtBootSect; // error installing NT Boot sector, etc.
extern SCREEN DnsOpenReadScript; // can't open/read script file.
extern SCREEN DnsParseScriptFile; // can't parse unattended script file
extern SCREEN DnsBootMsgsTooLarge; extern SCREEN DnsNoSwapDrive; // can't find a drive for INF swap file
extern SCREEN DnsNoSmartdrv; // SMARTDRV is not installed
#if NEC_98
extern SCREEN FormatError; // 256 Sector Error for FDLess Setup.
#endif //NEC_98
//
// Boot code messages. These go in the fat and fat32 boot sectors.
//
extern CHAR __far BootMsgNtldrIsMissing[]; extern CHAR __far BootMsgDiskError[]; extern CHAR __far BootMsgPressKey[];
#if NEC_98
#else
BOOLEAN PatchMessagesIntoBootCode( VOID ); #endif
//
// Line number within the DnsReadBootcodeFile message where we will
// print the filename.
//
#define BOOTCODE_FILENAME_LINE 2
//
// coords for edit field for entering source path when none was
// specified on cmd line. Keep in sync with DnsNoShareGiven.
//
#define NO_SHARE_X 8
#define NO_SHARE_Y 8
#define NO_SHARE_W 64
#define BAD_SHARE_Y 10 // sync with DnsBadSource
//
// Keep this in sync with DnsBadInfSection
//
#define BAD_SECTION_LINE 0
//
// Keep these in sync with DnsGauge
//
#define GAUGE_WIDTH 50
#define GAUGE_THERM_X 15
#define GAUGE_THERM_Y 19
#define GAUGE_PERCENT_X 39
#define GAUGE_PERCENT_Y 17
//
// Keep in sync with DntTimeUntilShutdown, DnsAboutToReboot
//
#define SHUTDOWNTIME_X 23
#define SHUTDOWNTIME_Y 15
//
// Keep these in sync with DnsNotEnoughMemory
//
#define NOMEM_LINE1 3
#define NOMEM_LINE2 4
//
// Keep in syns with DnsCopyError, DnsVerifyError
//
#define COPYERR_LINE 2
#define VERIFYERR_LINE 4
//
// The max number of optional directories that can be
// specified
//
#define MAX_OPTIONALDIRS 1024
#define MAX_OEMBOOTFILES 1024
#define OPTDIR_TEMPONLY 0x00000001
#define OPTDIR_OEMSYS 0x00000002
#define OPTDIR_OEMOPT 0x00000004
#define OPTDIR_PLATFORM_INDEP 0x00000008
extern unsigned OptionalDirCount; // The number of Optional Directories
extern CHAR *OptionalDirs[MAX_OPTIONALDIRS]; // Pointer to Dir strings
extern unsigned OptionalDirFlags[MAX_OPTIONALDIRS]; // Flags for each Dir
extern unsigned OptionalDirFileCount; // How many files in optional dirs?
extern unsigned OemBootFilesCount; // The number of OEM boot files
extern CHAR *OemBootFiles[MAX_OEMBOOTFILES]; // Pointer to OEM boot filenames
extern PCHAR CmdToExecuteAtEndOfGui;
// slight overestimate, actually 66, but does that include terminal nul?
// 128 is a popular number in the source
#define DOS_MAX_PATH 70
//
// Logging stuff
//
#define LOGGING
#ifdef LOGGING
VOID __LOG( IN PCHAR FormatString, ... );
#define _LOG(x) __LOG x
#else
#define _LOG(x)
#endif // def LOGGING
extern SPACE_REQUIREMENT __far SpaceRequirements[];
int snprintf( char* target, size_t bufsize, const char *format, ... ); int vsnprintf( char* target, size_t bufsize, const char *format, va_list val );
|