#define PROG_NAME "" ?? "" #define PROG_DESC "" ?? "" #define PROG_VERS "" ?? "" #define ??_C_COPYRIGHT \ "Copyright © " ?? " by the State University of Campinas (UNICAMP)" /* Last edited on 2009-02-08 14:15:16 by stolfi */ #define PROG_HELP \ " " PROG_NAME " \\\n" \ " -blabber {AMOUNT} \\\n" \ " " argparser_help_info_HELP " \\\n" \ " < {INFILE} \\\n" \ " > {OUTFILE}" #define PROG_INFO \ "NAME\n" \ " " PROG_NAME " - " PROG_DESC "\n" \ "\n" \ "SYNOPSIS\n" \ PROG_HELP "\n" \ "\n" \ "DESCRIPTION\n" \ " The program bla bla bla" \ " bla bla bla bla {X+Y} bla bla" \ " bla {INFILE} bla \"foobar.ppm\" bla bla bla\n" \ "\n" \ " Beware that bla bla bla BLEBBLE BLOB bla" \ " bla bla bla bla.\n" \ "\n" \ "OPTIONS\n" \ " -blabber {AMOUNT}\n" \ " Blabbers for that {AMOUNT}. May also bla" \ " bla bla bla bla bla bla bla bla bla bla bla bla" \ " bla bla bla bla bla bla bla.\n" \ "\n" \ "DOCUMENTATION OPTIONS\n" \ argparser_help_info_HELP_INFO "\n" \ "\n" \ "SEE ALSO\n" \ " " ?? "(1).\n" \ "\n" \ "AUTHOR\n" \ " Created " ???-??-?? " by Jorge Stolfi, IC-UNICAMP.\n" \ "\n" \ "MODIFICATION HISTORY\n" \ " Option bla bla added by J. Stolfi, IC-UNICAMP.\n" \ "\n" \ "WARRANTY\n" \ argparser_help_info_NO_WARRANTY "\n" \ "\n" \ "RIGHTS\n" \ " " ??_C_COPYRIGHT ".\n" \ "\n" \ argparser_help_info_STANDARD_RIGHTS #define _GNU_SOURCE #include #include #include #include #include #include /* COMMAND-LINE OPTIONS */ typedef struct options_t { bool_t op1; /* A boolean argument. */ char* op2; /* A string-valued argument. */ } options_t; /* INTERNAL PROTOTYPES */ options_t *parse_options(int argc, char **argv); /* Parses the command line arguments and packs them as an {options_t}. */ int main(int argc,char** argv); /* IMPLEMENTATIONS */ int main(int argc, char** argv) { options_t *o = parse_options(argc, argv); return 0; } options_t *parse_options(int argc, char **argv) { /* Initialize argument parser: */ argparser_t *pp = argparser_new(stderr, argc, argv); argparser_set_help(pp, PROG_NAME " version " PROG_VERS ", usage:\n" PROG_HELP); argparser_set_info(pp, PROG_INFO); argparser_process_help_info_options(pp); /* Allocate the command line argument record: */ options_t *o = (options_t *)malloc(sizeof(options_t)); /* Parse keyword parameters: */ /* Parse the boolean option {op1}: */ o->op1 = argparser_keyword_present(pp, "-op1"); /* Parse the string option {op2}: */ if (argparser_keyword_present(pp, "-op2")) { o->op2 = argparser_get_next(pp); } else { o->op2 = "NONE"; } /* Parse positional arguments: */ argparser_skip_parsed(pp); if (argparser_next(pp) != NULL) { o->infile = argparser_get_next(pp); } else { o->infile = "-"; } if (argparser_next(pp) != NULL) { o->outfile = argparser_get_next(pp); } else { o->outfile = "-"; } /* Check for spurious arguments: */ argparser_finish(pp); return o; }