| 17 | } |
| 18 | |
| 19 | void Opt::Init(int argc, char* argv[], const char* optString, const Ion* longOptions, bool longOnly, bool isOpen) { |
| 20 | Ions_ = longOptions; |
| 21 | Err = true; |
| 22 | GotError_ = false; |
| 23 | Ind = argc; |
| 24 | |
| 25 | Opts_.Reset(new TOptsNoDefault(optString)); |
| 26 | for (const Ion* o = longOptions; o != nullptr && o->name != nullptr; ++o) { |
| 27 | TOpt* opt; |
| 28 | if ((unsigned)o->val < 0x80 && isalnum(o->val)) { |
| 29 | opt = &Opts_->CharOption(char(o->val)); |
| 30 | opt->AddLongName(o->name); |
| 31 | } else { |
| 32 | Opts_->AddLongOption(o->name); |
| 33 | opt = const_cast<TOpt*>(&Opts_->GetLongOption(o->name)); |
| 34 | } |
| 35 | opt->HasArg_ = EHasArg(o->has_arg); |
| 36 | opt->UserValue(o); |
| 37 | } |
| 38 | Opts_->AllowSingleDashForLong_ = longOnly; |
| 39 | Opts_->AllowPlusForLong_ = true; |
| 40 | Opts_->AllowUnknownCharOptions_ = isOpen; |
| 41 | Opts_->AllowUnknownLongOptions_ = false; |
| 42 | |
| 43 | OptsParser_.Reset(new TOptsParser(Opts_.Get(), argc, argv)); |
| 44 | } |
| 45 | |
| 46 | Opt::Opt(int argc, char* argv[], const char* optString, const Ion* longOptions, bool longOnly, bool isOpen) { |
| 47 | Init(argc, argv, optString, longOptions, longOnly, isOpen); |