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


/*  
	FIPS - the First nondestructive Interactive Partition Splitting program  
  
	Module cmdl_arg.cpp  
  
	RCS - Header:  
	$Header: c:/daten/fips/source/main/RCS/cmdl_arg.cpp 1.4 1995/01/19 00:00:51 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   
#include   
#include   
  
#include "global.h"  
#include "getopt.h"  
  
  
/* ----------------------------------------------------------------------- */  
/* Replacement for atoi                                                    */  
/* ----------------------------------------------------------------------- */  
  
static int atoint (char *string)  
{  
	long int value = 0;  
	while (isdigit (*string))  
	{  
		value = value * 10 + (*string - '0');  
		if (value > 32767) return (-1);  
		string++;  
	}  
	if (*string != '\0') return (-1);  
	return (int) value;  
}  
  
  
/* ----------------------------------------------------------------------- */  
/* Usage instructions                                                      */  
/* ----------------------------------------------------------------------- */  
  
static void usage (void)  
{  
	printf ("\nFIPS [-t] [-d] [-h|-?] [-n]:\n\n");  
	printf ("-t        : test mode (no writes to disk)\n");  
	printf ("-d        : debug mode\n");  
	printf ("-h/-?     : this help page\n");  
	printf ("-n   : select drive  - valid values: 128 to 255\n");  
}  
  
  
/* ----------------------------------------------------------------------- */  
/* Process commandline parameters                                          */  
/* ----------------------------------------------------------------------- */  
  
void evaluate_argument_vector (int argc, char *argv[])  
{  
	int c;  
  
	opterr = 0;  
  
	while ((c = getopt (argc, argv, ":htdn:")) >= 0)  
	{  
		switch (c)  
		{  
			case 't':  
				global.test_mode = true;  
				break;  
			case 'd':  
				global.debug_mode = true;  
				break;  
			case 'h':  
				usage ();  
				exit (1);  
			case 'n':  
				global.drive_number_cmdline = atoint (optarg);  
  
				if  
				(  
					global.drive_number_cmdline < 0x80  
					|| global.drive_number_cmdline > 0xff  
				)  
				{  
					fprintf  
					(  
						stderr,  
						"\nInvalid argument: %s\n",  
						optarg  
					);  
  
					usage ();  
					exit (-1);  
				}  
				break;  
			case ':':  
				fprintf  
				(  
					stderr,  
					"\nSwitch %c requires an argument\n",  
					optopt  
				);  
				usage ();  
				exit (-1);  
			case '?':  
				if (optopt != '?')  
					fprintf  
					(  
						stderr,  
						"\nInvalid Commandline Parameter: %s\n",  
						argv[optind - 1]  
					);  
  
				usage ();  
				exit (-1);  
		} /* switch */  
  
	} /* while */  
}