diff options
Diffstat (limited to 'examples/demo_info_options.c')
-rw-r--r-- | examples/demo_info_options.c | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/examples/demo_info_options.c b/examples/demo_info_options.c new file mode 100644 index 0000000..b7424eb --- /dev/null +++ b/examples/demo_info_options.c @@ -0,0 +1,155 @@ +/* + File autogenerated by gengetopt version 2.3 + generated with the following command: + gengetopt --file-name=demo_info_options --unamed-opts --input=demo_info_options.ggo + + The developers of gengetopt consider the fixed text that goes in all + gengetopt output files to be in the public domain: + we make no copyright claims on it. +*/ + + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +/* If we use autoconf. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +/* Check for configure's getopt check result. */ +#ifndef HAVE_GETOPT_LONG +#include "getopt.h" +#else +#include <getopt.h> +#endif + +#include "demo_info_options.h" + + +void +cmdline_parser_print_version (void) +{ + printf ("%s %s\n", PACKAGE, VERSION); +} + +void +cmdline_parser_print_help (void) +{ + cmdline_parser_print_version (); + printf("\n" +"Usage: %s [OPTIONS]... [FILES]...\n\ + -h --help Print help and exit\n\ + -V --version Print version and exit\n\ + -a --assign Test the assignment operator (default=off)\n\ + -w --warning Turn on warnings (for debugging) (default=off)\n\ + -n --notice Turn on notices (for debugging) (default=off)\n\ +", PACKAGE); +} + + +static char * +gengetopt_strdup (char * s) +{ + char * n, * pn, * ps = s; + while (*ps) ps++; + n = (char *) malloc (1 + ps - s); + if (n != NULL) + { + for (ps=s,pn=n; *ps; ps++,pn++) + *pn = *ps; + *pn = 0; + } + return n; +} + + +int +cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info) +{ + int c; /* Character of the parsed option. */ + int missing_required_options = 0; + + args_info->help_given = 0 ; + args_info->version_given = 0 ; + args_info->assign_given = 0 ; + args_info->warning_given = 0 ; + args_info->notice_given = 0 ; +#define clear_args() { \ + args_info->assign_flag = 0;\ + args_info->warning_flag = 0;\ + args_info->notice_flag = 0;\ +} + + clear_args(); + + args_info->inputs = NULL; + args_info->inputs_num = 0; + + while (1) + { + int option_index = 0; + static struct option long_options[] = { + { "help", 0, NULL, 'h' }, + { "version", 0, NULL, 'V' }, + { "assign", 0, NULL, 'a' }, + { "warning", 0, NULL, 'w' }, + { "notice", 0, NULL, 'n' }, + { NULL, 0, NULL, 0 } + }; + + c = getopt_long (argc, argv, "hVawn", long_options, &option_index); + + if (c == -1) break; /* Exit from `while (1)' loop. */ + + switch (c) + { + case 'h': /* Print help and exit. */ + clear_args (); + cmdline_parser_print_help (); + exit (0); + + case 'V': /* Print version and exit. */ + clear_args (); + cmdline_parser_print_version (); + exit (0); + + case 'a': /* Test the assignment operator. */ + args_info->assign_flag = !(args_info->assign_flag); + break; + + case 'w': /* Turn on warnings (for debugging). */ + args_info->warning_flag = !(args_info->warning_flag); + break; + + case 'n': /* Turn on notices (for debugging). */ + args_info->notice_flag = !(args_info->notice_flag); + break; + + case 0: /* Long option with no short option */ + + case '?': /* Invalid option. */ + /* `getopt_long' already printed an error message. */ + exit (1); + + default: /* bug: option not considered. */ + fprintf (stderr, "%s: option unknown: %c\n", PACKAGE, c); + abort (); + } /* switch */ + } /* while */ + + if ( missing_required_options ) + exit (1); + + if (optind < argc) + { + int i = 0 ; + + args_info->inputs_num = argc - optind ; + args_info->inputs = + (char **)(malloc ((args_info->inputs_num)*sizeof(char *))) ; + while (optind < argc) + args_info->inputs[ i++ ] = gengetopt_strdup (argv[optind++]) ; + } + + return 0; +} |