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
00047 #ifndef CCXX_CMDOPTNS_H_
00048 #define CCXX_CMDOPTNS_H_
00049
00050 #ifndef CCXX_STRING_H_
00051 #include <cc++/string.h>
00052 #endif
00053
00054 #ifdef CCXX_NAMESPACES
00055 namespace ost {
00056 #endif
00057
00058 class CommandOption;
00059 class CommandOptionParse;
00060
00068 extern __EXPORT CommandOption * defaultCommandOptionList;
00069
00080 class __EXPORT CommandOption {
00081 public:
00082
00087 const char * optionName;
00088
00093 const char * optionLetter;
00094
00100 const char * description;
00101
00107 enum OptionType {
00111 hasArg,
00115 noArg,
00119 trailing,
00123 collect
00124 };
00125
00129 OptionType optionType;
00130
00135 bool required;
00136
00141 CommandOption * next;
00142
00146 virtual ~CommandOption();
00147
00159 CommandOption(
00160 const char * inOptionName,
00161 const char * inOptionLetter,
00162 const char * inDescription,
00163 OptionType inOptionType,
00164 bool inRequired = false,
00165 CommandOption ** ppNext = & defaultCommandOptionList
00166 );
00167
00175 virtual void foundOption( CommandOptionParse * cop, const char * value = 0 );
00176
00185 virtual void foundOption( CommandOptionParse * cop, const char ** value, int num );
00186
00193 virtual void parseDone( CommandOptionParse * cop );
00194
00202 virtual void performTask( CommandOptionParse * cop );
00203
00210 virtual bool hasValue();
00211
00212 };
00213
00218 class __EXPORT CommandOptionWithArg : public CommandOption {
00219 public:
00220
00224 const char ** values;
00225
00229 int numValue;
00230
00242 CommandOptionWithArg(
00243 const char * inOptionName,
00244 const char * inOptionLetter,
00245 const char * inDescription,
00246 OptionType inOptionType,
00247 bool inRequired = false,
00248 CommandOption ** ppNext = & defaultCommandOptionList
00249 );
00250
00251 virtual ~CommandOptionWithArg();
00252
00253 virtual void foundOption( CommandOptionParse * cop, const char * value = 0 );
00254 virtual void foundOption( CommandOptionParse * cop, const char ** value, int num );
00255 virtual bool hasValue();
00256 };
00257
00261 class __EXPORT CommandOptionArg : public CommandOptionWithArg {
00262 public:
00263
00274 CommandOptionArg(
00275 const char * inOptionName,
00276 const char * inOptionLetter,
00277 const char * inDescription,
00278 bool inRequired = false,
00279 CommandOption ** ppNext = & defaultCommandOptionList
00280 );
00281
00282 virtual ~CommandOptionArg();
00283
00284
00285 };
00286
00296 class __EXPORT CommandOptionRest : public CommandOptionWithArg {
00297 public:
00298
00309 CommandOptionRest(
00310 const char * inOptionName,
00311 const char * inOptionLetter,
00312 const char * inDescription,
00313 bool inRequired = false,
00314 CommandOption ** ppNext = & defaultCommandOptionList
00315 );
00316
00317 };
00318
00326 class __EXPORT CommandOptionCollect : public CommandOptionWithArg {
00327 public:
00328
00339 CommandOptionCollect(
00340 const char * inOptionName,
00341 const char * inOptionLetter,
00342 const char * inDescription,
00343 bool inRequired = false,
00344 CommandOption ** ppNext = & defaultCommandOptionList
00345 );
00346
00347 };
00348
00352 class __EXPORT CommandOptionNoArg : public CommandOption {
00353 public:
00354
00358 int numSet;
00359
00370 CommandOptionNoArg(
00371 const char * inOptionName,
00372 const char * inOptionLetter,
00373 const char * inDescription,
00374 bool inRequired = false,
00375 CommandOption ** ppNext = & defaultCommandOptionList
00376 );
00377
00381 virtual void foundOption( CommandOptionParse * cop, const char * value = 0 );
00382
00383 };
00384
00394 class __EXPORT CommandOptionParse {
00395 public:
00396
00400 virtual ~CommandOptionParse() = 0;
00401
00405 virtual bool argsHaveError() = 0;
00406
00410 virtual const char * printErrors() = 0;
00411
00415 virtual const char * printUsage() = 0;
00416
00421 virtual void registerError( const char * errMsg ) = 0;
00422
00427 virtual void performTask() = 0;
00428
00429 };
00430
00439 __EXPORT CommandOptionParse * makeCommandOptionParse(
00440 int argc,
00441 char ** argv,
00442 char * comment,
00443 CommandOption * options = defaultCommandOptionList
00444 );
00445
00446 #ifdef CCXX_NAMESPACES
00447 }
00448 #endif
00449
00450 #endif
00451