/* 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 #include #include #include #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][-p][-c][-o]}:\n\n"); printf ("-t : test mode (no writes to disk)\n"); printf ("-d : debug mode\n"); printf ("-h/-? : this help page\n"); printf ("-d : select drive \n"); printf ("-p : select partition \n"); printf ("-c : new start cylinder = \n"); printf ("-o : override error message\n\n"); printf ("where 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); } } }