00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef __CCXX_CMDOPTNS_H__
00043 #define __CCXX_CMDOPTNS_H__
00044
00045 #include "config.h"
00046
00047 #ifdef HAVE_GETOPT_LONG
00048
00056 class CommandOption;
00057 class CommandOptionParse;
00058
00066 extern CommandOption * DefaultCommandOptionList;
00067
00078 class CommandOption {
00079 public:
00080
00085 const char * option_name;
00086
00091 const char * option_letter;
00092
00098 const char * description;
00099
00105 enum OptionType {
00109 HasArg,
00113 NoArg,
00117 Trailing,
00121 Collect
00122 };
00123
00127 OptionType option_type;
00128
00133 bool required;
00134
00139 CommandOption * next;
00140
00144 virtual ~CommandOption();
00145
00157 CommandOption(
00158 const char * in_option_name,
00159 const char * in_option_letter,
00160 const char * in_description,
00161 OptionType in_option_type,
00162 bool in_required = false,
00163 CommandOption ** pp_next = & DefaultCommandOptionList
00164 );
00165
00173 virtual void FoundOption( CommandOptionParse * cop, const char * value = 0 );
00174
00183 virtual void FoundOption( CommandOptionParse * cop, const char ** value, int num );
00184
00191 virtual void ParseDone( CommandOptionParse * cop );
00192
00200 virtual void PerformTask( CommandOptionParse * cop );
00201
00208 virtual bool HasValue();
00209
00210 };
00211
00216 class CommandOptionWithArg : public CommandOption {
00217 public:
00218
00222 const char ** values;
00223
00227 int numvalue;
00228
00240 CommandOptionWithArg(
00241 const char * in_option_name,
00242 const char * in_option_letter,
00243 const char * in_description,
00244 OptionType in_option_type,
00245 bool in_required = false,
00246 CommandOption ** pp_next = & DefaultCommandOptionList
00247 );
00248
00249 virtual ~CommandOptionWithArg();
00250
00251 virtual void FoundOption( CommandOptionParse * cop, const char * value = 0 );
00252 virtual void FoundOption( CommandOptionParse * cop, const char ** value, int num );
00253 virtual bool HasValue();
00254 };
00255
00259 class CommandOptionArg : public CommandOptionWithArg {
00260 public:
00261
00272 CommandOptionArg(
00273 const char * in_option_name,
00274 const char * in_option_letter,
00275 const char * in_description,
00276 bool in_required = false,
00277 CommandOption ** pp_next = & DefaultCommandOptionList
00278 );
00279
00280 virtual ~CommandOptionArg();
00281
00282
00283 };
00284
00294 class CommandOptionRest : public CommandOptionWithArg {
00295 public:
00296
00307 CommandOptionRest(
00308 const char * in_option_name,
00309 const char * in_option_letter,
00310 const char * in_description,
00311 bool in_required = false,
00312 CommandOption ** pp_next = & DefaultCommandOptionList
00313 );
00314
00315 };
00316
00324 class CommandOptionCollect : public CommandOptionWithArg {
00325 public:
00326
00337 CommandOptionCollect(
00338 const char * in_option_name,
00339 const char * in_option_letter,
00340 const char * in_description,
00341 bool in_required = false,
00342 CommandOption ** pp_next = & DefaultCommandOptionList
00343 );
00344
00345 };
00346
00350 class CommandOptionNoArg : public CommandOption {
00351 public:
00352
00356 int numset;
00357
00368 CommandOptionNoArg(
00369 const char * in_option_name,
00370 const char * in_option_letter,
00371 const char * in_description,
00372 bool in_required = false,
00373 CommandOption ** pp_next = & DefaultCommandOptionList
00374 );
00375
00379 virtual void FoundOption( CommandOptionParse * cop, const char * value = 0 );
00380
00381 };
00382
00392 class CommandOptionParse {
00393 public:
00394
00398 virtual ~CommandOptionParse() = 0;
00399
00403 virtual bool ArgsHaveError() = 0;
00404
00408 virtual const char * PrintErrors() = 0;
00409
00413 virtual const char * PrintUsage() = 0;
00414
00419 virtual void RegisterError( const char * err_msg ) = 0;
00420
00425 virtual void PerformTask() = 0;
00426
00427 };
00428
00437 CommandOptionParse * MakeCommandOptionParse(
00438 int argc,
00439 char ** argv,
00440 char * comment,
00441 CommandOption * options = DefaultCommandOptionList
00442 );
00443
00444
00445 #endif
00446 #endif
00447