⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 Unix操作系统minix 2.0源码
💻 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 <stdlib.h>

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

		}

	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -