www.pudn.com > minix.instalation.cd-rom-2.0.rar > MAIN.CPP


/*  
	FIPS - the First nondestructive Interactive Partition Splitting program  
  
	Module main.cpp  
  
	RCS - Header:  
	$Header: c:/daten/fips/source/main/RCS/main.cpp 1.4 1995/01/19 00:00:55 schaefer Exp schaefer $  
  
	Copyright (C) 1993 Arno Schaefer  
  
	This program is free software; you can redistribute it and/or modify  
	it under the terms of the GNU General Public License as published by  
	the Free Software Foundation; either version 2 of the License, or  
	(at your option) any later version.  
  
	This program is distributed in the hope that it will be useful,  
	but WITHOUT ANY WARRANTY; without even the implied warranty of  
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
	GNU General Public License for more details.  
  
	You should have received a copy of the GNU General Public License  
	along with this program; if not, write to the Free Software  
	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
  
  
	Report problems and direct all questions to:  
  
	schaefer@rbg.informatik.th-darmstadt.de  
*/  
  
#include   
#include "logdr_st.h"  
#include "global.h"  
#include "input.h"  
#include "fat.h"  
#include "fipsspec.h"  
#include "host_os.h"  
  
  
#define FIRST_CHECK false  
#define FINAL_CHECK true  
  
  
extern unsigned _stklen = 20000U;  
  
  
int main (int argc, char *argv[])  
{  
	// *********************************************************  
	// Initialize Program  
	// *********************************************************  
  
	evaluate_argument_vector (argc, argv);  
  
	atexit (exit_function);  
  
	if (global.debug_mode)  
		global.open_debugfile (argc,argv);  
  
	notice ();  
  
	host_os os;  
	char infostring[256];  
  
	if (os.ok () != OK)  
	{  
		printx ("\nWARNING: FIPS has detected that it is running under %s\n"  
			"FIPS should not be used under a multitasking OS. If possible, boot from a DOS\n"  
			"disk and then run FIPS. Read FIPS.DOC for more information.\n\n",  
			os.information (infostring));  
  
		ask_if_proceed ();  
	}  
  
  
	// *********************************************************  
	// Select Drive  
	// *********************************************************  
  
	int drive_number;  
  
	if (global.drive_number_cmdline != 0)  
		drive_number = global.drive_number_cmdline;  
	else  
		drive_number = ask_for_drive_number ();  
  
	fips_harddrive harddrive (drive_number);	// reads geometry  
  
	if (harddrive.errorcode)  
		error  
		(  
			"Error reading drive geometry: Errorcode %u",  
			harddrive.errorcode  
		);  
  
	harddrive.reset ();  
  
	if (harddrive.errorcode)  
	{  
		warning  
		(  
			false,  
			"Drive initialization failure: Errorcode %u",  
			harddrive.errorcode  
		);  
  
		ask_if_proceed ();  
	}  
  
  
	// *********************************************************  
	// Select partition  
	// *********************************************************  
  
	if (harddrive.read_root_sector () != 0)  
		error ("Error reading root sector");  
  
	if (global.debug_mode)  
	{  
		fprintf  
		(  
			global.debugfile,  
			"\nRoot sector drive %02Xh:\n\n",  
			drive_number  
		);  
  
		hexwrite (harddrive.root_sector->data, 512, global.debugfile);  
	}  
  
	while (true)  
	{  
		fips_harddrive hd = harddrive;  
  
		hd.get_partition_table();  
  
		printx ("\nPartition table:\n\n");  
		hd.print_partition_table ();  
  
		hd.check (FIRST_CHECK);  
  
		int partition_number =  
			ask_for_partition_number  
			(  
				hd.partition_table().partition_info  
			);  
  
		int system = hd.partition_table()  
			.partition_info[partition_number].system;  
  
		switch (system)  
		{  
			case 5:  
				error ("Can't split extended partitions");  
				break;  
			case 1: case 4: case 6:  
			{  
				fips_partition* partition =  
					new fips_partition (&hd, partition_number);  
  
				if (partition->split (hd) == true)  
					return (0);  
  
				delete partition;  
			}  
				break;  
			default:  
				error ("Unknown file system: %02Xh", system);  
				break;  
		}  
	}  
}