sgpemv2/src/parse_opts.cc

142 lines
3.9 KiB
C++
Raw Normal View History

// src/parseopts.cc - Copyright 2005, 2006, University
// of Padova, dept. of Pure and Applied
// Mathematics
//
// This file is part of SGPEMv2.
//
// This 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.
//
// SGPEMv2 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 SGPEMv2; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "config.h"
#include "gettext.h"
#include "backend/global_settings.hh"
#include "parse_opts.hh"
#ifdef _GNU_SOURCE
#include <getopt.h>
#endif
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <iostream>
// Static declarations:
static void display_help();
void
parse_options(int& argc, char**& argv)
{
using sgpem::GlobalSettings;
print_license();
static const char* short_options = "NhP:M:";
#ifdef _GNU_SOURCE
// Initialize the array for GNU long options
static struct option long_options[] =
{
{"no-gui", no_argument, NULL, 'N' },
{"help", no_argument, NULL, 'h' },
{"policies-dir", required_argument, NULL, 'P'},
{"modules-dir", required_argument, NULL, 'M'}
};
int option_index = 0;
#endif
int opt;
do
{
#ifdef _GNU_SOURCE
opt = getopt_long(argc, argv, short_options,
long_options, &option_index);
#else
opt = getopt(argc, argv, short_options);
#endif
switch(opt)
{
case -1:
// We have finished normally
break;
case 'N' :
// We don't return to main, instead we
// initialize the command line version
// of sgpemv2 (?)
// FIXME : to be written!
break;
case 'P':
GlobalSettings::instance().add_policies_dir(optarg);
break;
case 'M':
GlobalSettings::instance().add_modules_dir(optarg);
break;
case ':':
printf(_("[EE] Wrong number of parameters. Please see \n"
"%s --help\n"), argv[0]);
exit(-1);
case 'h' :
default :
display_help();
}
}
while( opt != -1 );
// Set these two to start from additional filenames on the cmdline:
argc -= optind;
argv += optind;
}
void
display_help()
{
printf( _("SGPEMv2 is an educational software acting as a process scheduling simulator\n"
"\n\nUsage : sgpemv2 [options] filename"
"\n\nOptions:\n"
"\t-h, --help this help you're reading\n"
"\t-N, --no-gui starts the program in command line mode\n"
"\t-P dir, --policies-dir=dir\n"
"\t add this directory to the default modules\n"
"\t search path\n"
"\t-M dir, --modules-dir=dir\n"
"\t add this directory to default plugin\n"
"\t search path\n"
"\nFilename:\n"
"\t a valid SGPEMv2 XML file\n"
"\t to be opened.\n"
"\nLong options are available only on GNU systems.\n\n" ) );
exit(0);
}
void
print_license()
{
// Do _NOT_ translate this text.
std::cerr <<
"SGPEMv2, Copyright (C) 2005, 2006 University of Padova,\n"
" dept. of Pure and Applied Mathematics.\n"
"SGPEMv2 comes with ABSOLUTELY NO WARRANTY. This is free \n"
"software, and you are welcome to redistribute it under \n"
"the terms of the GNU General Public License; for details\n"
"see file COPYING contained in the source package. \n"
<< std::endl;
}