*\brief Constructor.
*
* This constructor makes a new argument_reader ready to use.
- *\arg app_name Name of the application as mentioned in the
+ *\arg name Name of the application as mentioned in the
* "Use: <appname> ..." help message.
*/
-argument_reader::argument_reader(string app_name){
- progname=app_name;
+argument_reader::argument_reader(string name){
+ app_name=app_name;
}
string description, int * status,
string * target, string placeholder){
- if(status!=NULL) arguments.insert(arguments.end(),
- parameter(shortname,longname, description,
+ if(status!=NULL) opt_v.insert(opt_v.end(),
+ opt_t(shortname,longname, description,
status,target,placeholder)
);
}
*/
void argument_reader::add_argument(string placeholder, string description, int * status, string * target){
if (target!=NULL) if(status!=NULL)
- free_arguments.insert(free_arguments.end(),free_parameter(placeholder,description,status,target));
+ arg_v.insert(arg_v.end(),arg_t(placeholder,description,status,target));
}
/*!
- * Read in the args passed to main().
- *\returns empty vector on success or the error messages to be output.
+ *\Read in the args passed to main().
+ *\returns empty vector on success or the error messages to be output.
*/
vector<string> argument_reader::read_args(int argc, char ** args){
vector<string> result;
// Look for long argument
if ((akt_p->substr(0,2)=="--")&&(free_parms_count==0)){
int found=0;
- for (vector<parameter>::iterator parm_p=arguments.begin();parm_p<arguments.end();parm_p++){
+ for (vector<opt_t>::iterator parm_p=opt_v.begin();parm_p<opt_v.end();parm_p++){
if (akt_p->substr(2,parm_p->longname.length())==parm_p->longname){
found=1;
*(parm_p->status)=1;
int stop_char_loop=0;
for (unsigned int pos=1; pos<akt_p->length()&& !stop_char_loop ;pos++){
int found=0;
- for (vector<parameter>::iterator parm_p=arguments.begin();parm_p<arguments.end();parm_p++){
+ for (vector<opt_t>::iterator parm_p=opt_v.begin();parm_p<opt_v.end();parm_p++){
if (parm_p->shortname[0]==(*akt_p)[pos]){
found=1;
(*parm_p->status)=1;
} // char loop
}// switch found
else{ // no switch found
- if (free_parms_count<free_arguments.size()){
- *(free_arguments[free_parms_count].target)=*akt_p;
+ if (free_parms_count<arg_v.size()){
+ *(arg_v[free_parms_count].target)=*akt_p;
+ *(arg_v[free_parms_count].status)=1;
}
free_parms_count++;
}
} //looking for not -- args
} // argv loop
- if (free_parms_count>free_arguments.size()) result.insert(result.begin(),"Too many arguments!");
+ if (free_parms_count>arg_v.size()) result.insert(result.begin(),"Too many arguments!");
if (!result.empty()){
result.insert(result.begin(),"Error!");
result.insert(result.begin(),"");
}
-// if (!result.empty()){
-// get_help(result);
-// }
return result;
}
*\arg target Reference to a vector<string> to which lots of helpful
* strings are appended.
*/
-void argument_reader::get_help(vector<string> & result){
-
- result.insert(result.end(),"");
- string line="Usage: "+progname;
- for (vector<parameter>::iterator parm_p=arguments.begin();parm_p<arguments.end();parm_p++){
+void argument_reader::get_help(vector<string> & target){
+ target.insert(target.end(),"");
+ string line="Usage: "+app_name;
+ for (vector<opt_t>::iterator parm_p=opt_v.begin();parm_p<opt_v.end();parm_p++){
string addstr=" [-"+parm_p->shortname;
if (parm_p->target!=0) addstr+=parm_p->placeholder;
addstr+="]";
if (line.length()+addstr.length()>79){
- result.insert(result.end(),line);
- line=string(7+progname.length(),' ');
+ target.insert(target.end(),line);
+ line=string(7+app_name.length(),' ');
}
line+=addstr;
}
- for (vector<free_parameter>::iterator parm_p=free_arguments.begin();parm_p<free_arguments.end();parm_p++){
+ for (vector<arg_t>::iterator parm_p=arg_v.begin();parm_p<arg_v.end();parm_p++){
if (line.length()+parm_p->placeholder.length()>79){
- result.insert(result.end(),line);
- line=string(7+progname.length(),' ');
+ target.insert(target.end(),line);
+ line=string(7+app_name.length(),' ');
}
line+=" ["+parm_p->placeholder+"]";
}
- result.insert(result.end(),line);
+ target.insert(target.end(),line);
/*******************************/
vector<string> left,right;
- for (vector<parameter>::iterator parm_p=arguments.begin();parm_p<arguments.end();parm_p++){
+ for (vector<opt_t>::iterator parm_p=opt_v.begin();parm_p<opt_v.end();parm_p++){
line=parm_p->description;
string st2=" -"+parm_p->shortname;
if (parm_p->target)st2+=" "+parm_p->placeholder;
right.insert(right.end(),line);
}
- for (vector<free_parameter>::iterator parm_p=free_arguments.begin();parm_p<free_arguments.end();parm_p++){
+ for (vector<arg_t>::iterator parm_p=arg_v.begin();parm_p<arg_v.end();parm_p++){
string st2;
line=parm_p->description;
st2+=" "+parm_p->placeholder;
right.insert(right.end(),line);
}
- if (arguments.size()){
- result.insert(result.end(),"");
- result.insert(result.end(),"Options:");
+ if (opt_v.size()){
+ target.insert(target.end(),"");
+ target.insert(target.end(),"Options:");
}
unsigned int max_width=0;
- for (unsigned int c=0; c<arguments.size();c++)
+ for (unsigned int c=0; c<opt_v.size();c++)
if(left[c].length()>max_width) max_width=left[c].length();
- for (unsigned int c=0; c<arguments.size();c++){
+ for (unsigned int c=0; c<opt_v.size();c++){
string nl(max_width,' ');
nl.replace(0,left[c].length(),left[c]);
nl+=" "+right[c];
while (nl.length()>80){ // Too long???
int limit=nl.find_last_of(' ',80);
- printf("limit:%i\n",limit);
- result.insert(result.end(),nl.substr(0,limit));
+ target.insert(target.end(),nl.substr(0,limit));
nl=string(max_width+2,' ')+nl.substr(limit+1);
}
- result.insert(result.end(),nl);
+ target.insert(target.end(),nl);
}
- if (free_arguments.size()){
- result.insert(result.end(),"");
- result.insert(result.end(),"Arguments:");
+ if (arg_v.size()){
+ target.insert(target.end(),"");
+ target.insert(target.end(),"Arguments:");
}
max_width=0;
- for (unsigned int c=arguments.size(); c<arguments.size()+free_arguments.size();c++)
+ for (unsigned int c=opt_v.size(); c<opt_v.size()+arg_v.size();c++)
if(left[c].length()>max_width) max_width=left[c].length();
- for (unsigned int c=arguments.size(); c<arguments.size()+free_arguments.size();c++){
+ for (unsigned int c=opt_v.size(); c<opt_v.size()+arg_v.size();c++){
string nl(max_width,' ');
nl.replace(0,left[c].length(),left[c]);
nl+=" "+right[c];
while (nl.length()>80){ // Too long???
int limit=nl.find_last_of(' ',80);
printf("limit:%i\n",limit);
- result.insert(result.end(),nl.substr(0,limit));
+ target.insert(target.end(),nl.substr(0,limit));
nl=string(max_width+2,' ')+nl.substr(limit+1);
}
- result.insert(result.end(),nl);
+ target.insert(target.end(),nl);
}
- result.insert(result.end(),"");
+ target.insert(target.end(),"");
}
/*!
/**************************************************/
-argument_reader::parameter::parameter(string n_shortname, string n_longname,string n_description, int * n_status,
+argument_reader::opt_t::opt_t(string n_shortname, string n_longname,string n_description, int * n_status,
string * n_target, string n_placeholder){
shortname=n_shortname;
longname=n_longname;
if (status) *status=0;
}
-argument_reader::free_parameter::free_parameter( string n_placeholder, string n_description,
+argument_reader::arg_t::arg_t( string n_placeholder, string n_description,
int * n_status, string * n_target){
description=n_description;
status=n_status;