diff --git a/options.cc b/options.cc index b58dffb1aeb1b95ee45b2631de25d979f198c61c..a4f97f7bce67ccf613776996d5f372ca10c64bef 100644 --- a/options.cc +++ b/options.cc @@ -40,38 +40,65 @@ ostream& operator<<(ostream &os, const BaseOption& o) { void OptionParser::usage() { - cerr << "Usage: " << endl << "\t" << progname_ << " " << example_ << endl; - - cerr << endl << "Compulsory arguments:" << endl; + cerr << endl << progname_ << endl << endl; + cerr << "Usage: " << endl << example_ << endl; for(Options::iterator option = options_.begin(); option != options_.end(); option++) { - if((*option)->compulsory()) + if((*option)->compulsory()) { + static bool banner = true; + if(banner) { + cerr << endl << "Compulsory arguments (You MUST set one or more of):" << endl; + banner = false; + } cerr << **option << endl; + } } - cerr << endl << "Optional arguments:" << endl; for(Options::iterator option = options_.begin(); option != options_.end(); option++) { - if(!(*option)->compulsory()) + if(!(*option)->compulsory()) { + static bool banner = true; + if(banner) { + cerr << endl << "Optional arguments (You may optionally specify one or more of):" << endl; + banner = false; + } cerr << **option << endl; + } } cerr << endl; cerr << endl; } -// BaseOption * OptionParser::operator[](const string& key) -// { -// OptionMap::iterator option = options_.find(key); -// if(option != options_.end()) -// return option->second; -// else // An unknown option! -// return NULL; -// } +bool OptionParser::check_compulsory_arguments(bool verbose) +{ + bool okay = true; + + for(Options::iterator option = options_.begin(); + option != options_.end(); + option++) { + + if((*option)->compulsory() && (*option)->unset()) { + if(okay) { + if(verbose) { + cerr << "***************************************************" << endl; + cerr << "The following COMPULSORY options have not been set:" << endl; + } + okay = false; + } + if(verbose) + cerr << **option << endl; + } + } + if(!okay && verbose) + cerr << "***************************************************" << endl; + + return okay; +} unsigned int OptionParser::parse_command_line(unsigned int argc, char **argv) @@ -123,28 +150,6 @@ unsigned int OptionParser::parse_command_line(unsigned int argc, } argcount += increments; } - // Now check that any compulsory options - // have been set - for(Options::iterator option = options_.begin(); - option != options_.end(); - option++) { - static bool banner = true; - - if((*option)->compulsory() && (*option)->unset()) { - if(banner) { - cerr << "***************************************************" << endl; - cerr << "The following COMPULSORY options have not been set!" << endl; - banner = false; - usage_needed = true; - } - cerr << **option << endl; - } - } - if(usage_needed) { - cerr << "***************************************************" << endl; - usage(); - exit(-1); - } return argcount; // User should process any remaining args } @@ -177,11 +182,11 @@ int main(unsigned int argc, char **argv) { OptionParser options("options", "-d <number> --mask <filename> --res <filename>"); - options.add(&verbose); - options.add(&help); - options.add(&dof); - options.add(&mask); - options.add(&resid); + options.add(verbose); + options.add(help); + options.add(dof); + options.add(mask); + options.add(resid); for(unsigned int a = options.parse_command_line(argc, argv); a < argc; a++) cout << argv[a] << endl;