#include <boost/program_options.hpp>
namespace po = boost::program_options;
namespace
{
po::options_description desc;
std::string help_string;
}
std::pair<std::string, std::string> fix_option(const std::string& value)
{
std::string name = value;
std::string val;
std::string::size_type pos = name.find("=");
if (pos != std::string::npos)
{
val = name.substr(pos + 1);
name = name.substr(0, pos);
}
if (name.substr(0, 2) != "--")
{
throw std::logic_error(std::string("invalid command, no -- in command: ") + name);
}
return std::make_pair(name.substr(2), val);
}
int main(int argc, char* argv[])
{
desc.add_options()
("help", po::value<std::string>(&help_string), "produce help");
po::variables_map vm;
po::parsed_options allowed = po::command_line_parser(argc, argv).options(desc).
extra_parser(fix_option).run();
po::store(allowed, vm);
po::notify(vm);
std::cout << help_string << std::endl;
}
I2luY2x1ZGUgPGJvb3N0L3Byb2dyYW1fb3B0aW9ucy5ocHA+CgpuYW1lc3BhY2UgcG8gPSBib29zdDo6cHJvZ3JhbV9vcHRpb25zOwoKbmFtZXNwYWNlCnsKCnBvOjpvcHRpb25zX2Rlc2NyaXB0aW9uIGRlc2M7CnN0ZDo6c3RyaW5nIGhlbHBfc3RyaW5nOwoKfQoKc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gZml4X29wdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCnsKICAgc3RkOjpzdHJpbmcgbmFtZSA9IHZhbHVlOwogICBzdGQ6OnN0cmluZyB2YWw7CiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gbmFtZS5maW5kKCI9Iik7CiAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCiAgIHsKICAgICAgdmFsID0gbmFtZS5zdWJzdHIocG9zICsgMSk7CiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigwLCBwb3MpOwogICB9CiAgIGlmIChuYW1lLnN1YnN0cigwLCAyKSAhPSAiLS0iKQogICB7CiAgICAgIHRocm93IHN0ZDo6bG9naWNfZXJyb3Ioc3RkOjpzdHJpbmcoImludmFsaWQgY29tbWFuZCwgbm8gLS0gaW4gY29tbWFuZDogIikgKyBuYW1lKTsKICAgfQogICByZXR1cm4gc3RkOjptYWtlX3BhaXIobmFtZS5zdWJzdHIoMiksIHZhbCk7Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKICAgZGVzYy5hZGRfb3B0aW9ucygpCiAgICAgICgiaGVscCIsIHBvOjp2YWx1ZTxzdGQ6OnN0cmluZz4oJmhlbHBfc3RyaW5nKSwgInByb2R1Y2UgaGVscCIpOwogICBwbzo6dmFyaWFibGVzX21hcCB2bTsKICAgcG86OnBhcnNlZF9vcHRpb25zIGFsbG93ZWQgPSBwbzo6Y29tbWFuZF9saW5lX3BhcnNlcihhcmdjLCBhcmd2KS5vcHRpb25zKGRlc2MpLgogICAgICBleHRyYV9wYXJzZXIoZml4X29wdGlvbikucnVuKCk7CiAgIHBvOjpzdG9yZShhbGxvd2VkLCB2bSk7CiAgIHBvOjpub3RpZnkodm0pOwogICBzdGQ6OmNvdXQgPDwgaGVscF9zdHJpbmcgPDwgc3RkOjplbmRsOwp9