#include <getopt.h>
#include <cstdlib>
#include <iostream>
using namespace std;
void help (char ** argv)
{
cout << "`" << argv[0] << "` experiments with long options." << endl;
}
void parse_args (int argc, char ** argv, int & verbose, int & param)
{
int c = 0;
while (1)
{
static struct option long_options[] =
{
{"help", no_argument, 0, 'h'},
{"verbose", required_argument, 0, 'v'},
{"param", required_argument, 0, 0}
};
int option_index = 0;
c = getopt_long (argc, argv, "hv:",
long_options, &option_index);
cout << "c=" << c << endl;
if (c == -1)
break;
switch (c)
{
case 0:
if (long_options[option_index].flag != 0)
break;
printf ("option %s", long_options[option_index].name);
if (optarg)
printf (" with arg %s", optarg);
printf ("\n");
break;
case 'h':
help (argv);
exit (0);
case 'v':
verbose = atoi(optarg);
break;
case 'param':
param = atoi(optarg);
break;
case '?':
abort ();
default:
abort ();
}
}
}
int main (int argc, char ** argv)
{
int verbose = 0;
int param = 0;
parse_args (argc, argv, verbose, param);
cout << "verbose=" << verbose << " param=" << param << endl;
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPGdldG9wdC5oPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBoZWxwIChjaGFyICoqIGFyZ3YpCnsKICBjb3V0IDw8ICJgIiA8PCBhcmd2WzBdIDw8ICJgIGV4cGVyaW1lbnRzIHdpdGggbG9uZyBvcHRpb25zLiIgPDwgZW5kbDsKfQoKdm9pZCBwYXJzZV9hcmdzIChpbnQgYXJnYywgY2hhciAqKiBhcmd2LCBpbnQgJiB2ZXJib3NlLCBpbnQgJiBwYXJhbSkKewogIGludCBjID0gMDsKICB3aGlsZSAoMSkKICB7CiAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9CiAgICAgIHsKCXsiaGVscCIsIG5vX2FyZ3VtZW50LCAwLCAnaCd9LAoJeyJ2ZXJib3NlIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICd2J30sCgl7InBhcmFtIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsIDB9CiAgICAgIH07CiAgICBpbnQgb3B0aW9uX2luZGV4ID0gMDsKICAgIGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImh2OiIsCgkJICAgICBsb25nX29wdGlvbnMsICZvcHRpb25faW5kZXgpOwogICAgY291dCA8PCAiYz0iIDw8IGMgPDwgZW5kbDsKICAgIGlmIChjID09IC0xKQogICAgICBicmVhazsKICAgIHN3aXRjaCAoYykKICAgIHsKICAgIGNhc2UgMDoKICAgICAgaWYgKGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLmZsYWcgIT0gMCkKCWJyZWFrOwogICAgICBwcmludGYgKCJvcHRpb24gJXMiLCBsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lKTsKICAgICAgaWYgKG9wdGFyZykKCXByaW50ZiAoIiB3aXRoIGFyZyAlcyIsIG9wdGFyZyk7CiAgICAgIHByaW50ZiAoIlxuIik7CiAgICAgIGJyZWFrOwogICAgY2FzZSAnaCc6CiAgICAgIGhlbHAgKGFyZ3YpOwogICAgICBleGl0ICgwKTsKICAgIGNhc2UgJ3YnOgogICAgICB2ZXJib3NlID0gYXRvaShvcHRhcmcpOwogICAgICBicmVhazsKICAgIGNhc2UgJ3BhcmFtJzoKICAgICAgcGFyYW0gPSBhdG9pKG9wdGFyZyk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAnPyc6CiAgICAgIGFib3J0ICgpOwogICAgZGVmYXVsdDoKICAgICAgYWJvcnQgKCk7CiAgICB9CiAgfQp9CgppbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKewogIGludCB2ZXJib3NlID0gMDsKICBpbnQgcGFyYW0gPSAwOwogIHBhcnNlX2FyZ3MgKGFyZ2MsIGFyZ3YsIHZlcmJvc2UsIHBhcmFtKTsKICBjb3V0IDw8ICJ2ZXJib3NlPSIgPDwgdmVyYm9zZSA8PCAiIHBhcmFtPSIgPDwgcGFyYW0gPDwgZW5kbDsKICByZXR1cm4gRVhJVF9TVUNDRVNTOwp9Cg==