home *** CD-ROM | disk | FTP | other *** search
- /*
- 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.1 1994/05/25 22:19:40 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 <stdio.h>
- #include <ctype.h>
- #include <string.h>
- #include <stdlib.h>
- #include "global.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|-?][-d<num>][-p<num>][-c<num>][-o<error>]}:\n\n");
- printf ("-t : test mode (no writes to disk)\n");
- printf ("-d : debug mode\n");
- printf ("-h/-? : this help page\n");
- printf ("-d<num> : select drive <num>\n");
- printf ("-p<num> : select partition <num>\n");
- printf ("-c<num> : new start cylinder = <num>\n");
- printf ("-o<error> : override error message\n\n");
- printf ("where <error> is\n\n");
- printf ("mb - more than one bootable partition\t");
- printf ("bf - invalid bootable-flag\n");
- printf ("lf - FAT too large\t\t\t");
- printf ("sf - FAT too small\n");
- printf ("md - wrong media descriptor byte\t");
- printf ("re - rootdir entries not multiple of 16\n");
- }
-
- /* ----------------------------------------------------------------------- */
- /* Process commandline parameters */
- /* ----------------------------------------------------------------------- */
-
- void evaluate_argument_vector (int argc,char *argv[])
- {
- while (--argc > 0)
- {
- int switchar = (*++argv)[0];
- char *sw = *argv + 1;
-
- if (switchar != '/' && switchar != '-') error ("Invalid Commandline Parameter: %s",*argv);
-
- else if (!strcmp (sw,"t") || !strcmp (sw,"test")) global.test_mode = true;
- else if (!strcmp (sw,"d") || !strcmp (sw,"debug")) global.debug_mode = true;
- else if (!strcmp (sw,"h") || !strcmp (sw,"help") || !strcmp (sw,"?"))
- {
- usage ();
- exit (0);
- }
- else if (!strcmp (sw,"omb")) global.override_multiple_boot = true;
- else if (!strcmp (sw,"obf")) global.override_bootable_flag = true;
- else if (!strcmp (sw,"ore")) global.override_rootdir_entries = true;
- else if (!strcmp (sw,"olf")) global.override_large_fat = true;
- else if (!strcmp (sw,"osf")) global.override_small_fat = true;
- else if (!strcmp (sw,"omd")) global.override_media_descriptor = true;
-
- else switch ((*argv)[1])
- {
- case 'd':
- {
- if ((global.drive_number_cmdline = atoint (*argv + 2)) == -1) error ("Invalid Argument: %s",*argv);
- if ((global.drive_number_cmdline < 0x80) || (global.drive_number_cmdline > 0xff)) error ("Invalid Drive number: %d",global.drive_number_cmdline);
- break;
- }
- case 'p':
- {
- if ((global.partition_number_cmdline = atoint (*argv + 2)) == -1) error ("Invalid Argument: %s",*argv);
- if ((global.partition_number_cmdline < 1) || (global.partition_number_cmdline > 4)) error ("Invalid Partition number: %d",global.partition_number_cmdline);
- break;
- }
- case 'c':
- {
- int h = atoint (*argv + 2);
- if (h == -1) error ("Invalid Argument: %s",*argv);
- global.new_start_cylinder_cmdline = h;
- break;
- }
- default: error ("Invalid Commandline Parameter: %s",*argv);
- }
- }
- }
-