4 argreader::argreader(string n_name
){
8 void argreader::add_param (string shortname
, string longname
,
9 string description
, int * status
,
10 string
* target
, string placeholder
){
11 if (target
!=NULL
) if(status
!=NULL
)
12 arguments
.insert(arguments
.end(),parameter(shortname
,longname
,description
,status
,target
,placeholder
));
15 void argreader::add_free_param(string placeholder
, string description
, int * status
, string
* target
){
16 if (target
!=NULL
) if(status
!=NULL
)
17 free_arguments
.insert(free_arguments
.end(),free_parameter(placeholder
,description
,status
,target
));
20 vector
<string
> argreader::read_args(int argc
, char ** args
){
21 vector
<string
> result
;
23 for (char ** akt
=args
; *akt
;akt
++) argv
.insert(argv
.end(),string(*akt
));
25 unsigned int free_parms_count
=0;
26 for (vector
<string
>::iterator akt_p
=argv
.begin()+1;akt_p
<argv
.end();akt_p
++){ //Argument loop
28 // Look for long argument
29 if ((akt_p
->substr(0,2)=="--")&&(free_parms_count
==0)){
31 for (vector
<parameter
>::iterator parm_p
=arguments
.begin();parm_p
<arguments
.end();parm_p
++){
32 if (akt_p
->substr(2,parm_p
->longname
.length())==parm_p
->longname
){
36 if (akt_p
->length()>2+parm_p
->longname
.length()){
37 *(parm_p
->target
)=akt_p
->substr(2+parm_p
->longname
.length());
39 } else // Word not long enough
40 if (akt_p
+1<argv
.end()) { // If next word existend
42 *(parm_p
->target
)=*(++akt_p
);
43 } else { // No next word :-(
44 result
.insert(result
.end(),
45 "Parameter --"+parm_p
->longname
+parm_p
->placeholder
+" needs an Argument!");
50 if (!found
) result
.insert(result
.end(),"Unknown parameter: "+*akt_p
);
51 } else { // No -- param, now look for switches
52 if (((*akt_p
)[0]=='-')&&(free_parms_count
==0)){
54 for (unsigned int pos
=1; pos
<akt_p
->length()&& !stop_char_loop
;pos
++){
56 for (vector
<parameter
>::iterator parm_p
=arguments
.begin();parm_p
<arguments
.end();parm_p
++){
57 if (parm_p
->shortname
[0]==(*akt_p
)[pos
]){
60 if (parm_p
->target
){ // Need argument
61 if (akt_p
->length()>pos
+1){
62 *(parm_p
->target
)=akt_p
->substr(pos
+1);
64 } else { // Word not long enough
65 printf("s word next\n");
66 if (akt_p
+1<argv
.end()) { // If next word existend
67 *(parm_p
->target
)=*(++akt_p
);
69 } else { // No next word :-(
70 result
.insert(result
.end(),
71 "Parameter --"+parm_p
->longname
+parm_p
->placeholder
+" needs an Argument!");
77 if (!found
) result
.insert(result
.end(),"Unknown switch: "+akt_p
->substr(pos
,1));
80 else{ // no switch found
81 if (free_parms_count
<free_arguments
.size()){
82 *(free_arguments
[free_parms_count
].target
)=*akt_p
;
86 } //looking for not -- args
88 if (free_parms_count
>free_arguments
.size()) result
.insert(result
.begin(),"Too many arguments!");
89 if (!result
.empty()) get_help(result
);
94 void argreader::get_help(vector
<string
> & result
){
95 result
.insert(result
.end(),"Usage:");
96 string line
=" "+progname
+" ";
97 for (vector
<parameter
>::iterator parm_p
=arguments
.begin();parm_p
<arguments
.end();parm_p
++){
98 line
+="[-"+parm_p
->shortname
;
99 if (parm_p
->target
!=0) line
+=parm_p
->placeholder
;
102 result
.insert(result
.end(),line
);
105 vector
<string
> argreader::get_help(){
106 vector
<string
> result
;
112 /**************************************************/
114 argreader::parameter::parameter(string n_shortname
, string n_longname
,string n_description
, int * n_status
,
115 string
* n_target
, string n_placeholder
){
116 shortname
=n_shortname
;
118 description
=n_description
;
121 placeholder
=n_placeholder
;
122 if (status
) *status
=0;
125 argreader::free_parameter::free_parameter( string n_placeholder
, string n_description
,
126 int * n_status
, string
* n_target
){
127 description
=n_description
;
130 placeholder
=n_placeholder
;
131 if (status
) *status
=0;