-/*
- File autogenerated by gengetopt version 2.21
- generated with the following command:
- ./src/gengetopt -i sample2.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.
-*/
-
-/* If we use autoconf. */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "getopt.h"
-
-#include "cmdline.h"
-
-const char *gengetopt_args_info_purpose = "this is just a test program for gengetopt";
-
-const char *gengetopt_args_info_usage = "Usage: " CMDLINE_PARSER_PACKAGE " [OPTIONS]...";
-
-const char *gengetopt_args_info_description = "";
-
-const char *gengetopt_args_info_help[] = {
- " -h, --help Print help and exit",
- " -V, --version Print version and exit",
- " -T, --invert-test TEST pin is inverted (default=off)",
- " -R, --invert-reset RESET pin is inverted (default=off)",
- " --telosb Assume a TelosB node (default=off)",
- " --tmote Assume a Tmote node (default=off)",
- " -v, --debug be verbose for debug purposes (default=off)",
- " -1, --f1x Specify CPU family (default=off)",
- " -I, --intelhex force fileformat to be IntelHex (default=off)",
- " -e, --erase erase device (default=off)",
- " -r, --reset reset device (default=off)",
- " -p, --program=STRING program file",
- " -c, --comport=STRING communicate using this device",
- 0
-};
-
-static
-void clear_given (struct gengetopt_args_info *args_info);
-static
-void clear_args (struct gengetopt_args_info *args_info);
-
-static int
-cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info,
- struct cmdline_parser_params *params, const char *additional_error);
-
-static int
-cmdline_parser_required2 (struct gengetopt_args_info *args_info, const char *prog_name, const char *additional_error);
-
-static char *
-gengetopt_strdup (const char *s);
-
-static
-void clear_given (struct gengetopt_args_info *args_info)
-{
- args_info->help_given = 0 ;
- args_info->version_given = 0 ;
- args_info->invert_test_given = 0 ;
- args_info->invert_reset_given = 0 ;
- args_info->telosb_given = 0 ;
- args_info->tmote_given = 0 ;
- args_info->debug_given = 0 ;
- args_info->f1x_given = 0 ;
- args_info->intelhex_given = 0 ;
- args_info->erase_given = 0 ;
- args_info->reset_given = 0 ;
- args_info->program_given = 0 ;
- args_info->comport_given = 0 ;
-}
-
-static
-void clear_args (struct gengetopt_args_info *args_info)
-{
- args_info->invert_test_flag = 0;
- args_info->invert_reset_flag = 0;
- args_info->telosb_flag = 0;
- args_info->tmote_flag = 0;
- args_info->debug_flag = 0;
- args_info->f1x_flag = 0;
- args_info->intelhex_flag = 0;
- args_info->erase_flag = 0;
- args_info->reset_flag = 0;
- args_info->program_arg = NULL;
- args_info->program_orig = NULL;
- args_info->comport_arg = NULL;
- args_info->comport_orig = NULL;
-
-}
-
-static
-void init_args_info(struct gengetopt_args_info *args_info)
-{
- args_info->help_help = gengetopt_args_info_help[0] ;
- args_info->version_help = gengetopt_args_info_help[1] ;
- args_info->invert_test_help = gengetopt_args_info_help[2] ;
- args_info->invert_reset_help = gengetopt_args_info_help[3] ;
- args_info->telosb_help = gengetopt_args_info_help[4] ;
- args_info->tmote_help = gengetopt_args_info_help[5] ;
- args_info->debug_help = gengetopt_args_info_help[6] ;
- args_info->f1x_help = gengetopt_args_info_help[7] ;
- args_info->intelhex_help = gengetopt_args_info_help[8] ;
- args_info->erase_help = gengetopt_args_info_help[9] ;
- args_info->reset_help = gengetopt_args_info_help[10] ;
- args_info->program_help = gengetopt_args_info_help[11] ;
- args_info->comport_help = gengetopt_args_info_help[12] ;
-
-}
-
-void
-cmdline_parser_print_version (void)
-{
- printf ("%s %s\n", CMDLINE_PARSER_PACKAGE, CMDLINE_PARSER_VERSION);
-}
-
-void
-cmdline_parser_print_help (void)
-{
- int i = 0;
- cmdline_parser_print_version ();
-
- if (strlen(gengetopt_args_info_purpose) > 0)
- printf("\n%s\n", gengetopt_args_info_purpose);
-
- printf("\n%s\n\n", gengetopt_args_info_usage);
-
- if (strlen(gengetopt_args_info_description) > 0)
- printf("%s\n", gengetopt_args_info_description);
-
- while (gengetopt_args_info_help[i])
- printf("%s\n", gengetopt_args_info_help[i++]);
-}
-
-void
-cmdline_parser_init (struct gengetopt_args_info *args_info)
-{
- clear_given (args_info);
- clear_args (args_info);
- init_args_info (args_info);
-}
-
-struct cmdline_parser_params *
-cmdline_parser_params_init()
-{
- struct cmdline_parser_params *params =
- (struct cmdline_parser_params *)malloc(sizeof(struct cmdline_parser_params));
-
- if (params)
- {
- params->override = 0;
- params->initialize = 0;
- params->check_required = 0;
- params->check_ambiguity = 0;
- }
-
- return params;
-}
-
-static void
-cmdline_parser_release (struct gengetopt_args_info *args_info)
-{
-
- if (args_info->program_arg)
- {
- free (args_info->program_arg); /* free previous argument */
- args_info->program_arg = 0;
- }
- if (args_info->program_orig)
- {
- free (args_info->program_orig); /* free previous argument */
- args_info->program_orig = 0;
- }
- if (args_info->comport_arg)
- {
- free (args_info->comport_arg); /* free previous argument */
- args_info->comport_arg = 0;
- }
- if (args_info->comport_orig)
- {
- free (args_info->comport_orig); /* free previous argument */
- args_info->comport_orig = 0;
- }
-
- clear_given (args_info);
-}
-
-int
-cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info)
-{
- FILE *outfile;
- int i = 0;
-
- outfile = fopen(filename, "w");
-
- if (!outfile)
- {
- fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename);
- return EXIT_FAILURE;
- }
-
- if (args_info->help_given) {
- fprintf(outfile, "%s\n", "help");
- }
- if (args_info->version_given) {
- fprintf(outfile, "%s\n", "version");
- }
- if (args_info->invert_test_given) {
- fprintf(outfile, "%s\n", "invert-test");
- }
- if (args_info->invert_reset_given) {
- fprintf(outfile, "%s\n", "invert-reset");
- }
- if (args_info->telosb_given) {
- fprintf(outfile, "%s\n", "telosb");
- }
- if (args_info->tmote_given) {
- fprintf(outfile, "%s\n", "tmote");
- }
- if (args_info->debug_given) {
- fprintf(outfile, "%s\n", "debug");
- }
- if (args_info->f1x_given) {
- fprintf(outfile, "%s\n", "f1x");
- }
- if (args_info->intelhex_given) {
- fprintf(outfile, "%s\n", "intelhex");
- }
- if (args_info->erase_given) {
- fprintf(outfile, "%s\n", "erase");
- }
- if (args_info->reset_given) {
- fprintf(outfile, "%s\n", "reset");
- }
- if (args_info->program_given) {
- if (args_info->program_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "program", args_info->program_orig);
- } else {
- fprintf(outfile, "%s\n", "program");
- }
- }
- if (args_info->comport_given) {
- if (args_info->comport_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "comport", args_info->comport_orig);
- } else {
- fprintf(outfile, "%s\n", "comport");
- }
- }
-
- fclose (outfile);
-
- i = EXIT_SUCCESS;
- return i;
-}
-
-void
-cmdline_parser_free (struct gengetopt_args_info *args_info)
-{
- cmdline_parser_release (args_info);
-}
-
-
-/* gengetopt_strdup() */
-/* strdup.c replacement of strdup, which is not standard */
-char *
-gengetopt_strdup (const char *s)
-{
- char *result = NULL;
- if (!s)
- return result;
-
- result = (char*)malloc(strlen(s) + 1);
- if (result == (char*)0)
- return (char*)0;
- strcpy(result, s);
- return result;
-}
-
-int
-cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info)
-{
- return cmdline_parser2 (argc, argv, args_info, 0, 1, 1);
-}
-
-int
-cmdline_parser_ext (int argc, char * const *argv, struct gengetopt_args_info *args_info,
- struct cmdline_parser_params *params)
-{
- int result;
- result = cmdline_parser_internal (argc, argv, args_info, params, NULL);
-
- if (result == EXIT_FAILURE)
- {
- cmdline_parser_free (args_info);
- exit (EXIT_FAILURE);
- }
-
- return result;
-}
-
-int
-cmdline_parser2 (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required)
-{
- int result;
- struct cmdline_parser_params params;
-
- params.override = override;
- params.initialize = initialize;
- params.check_required = check_required;
- params.check_ambiguity = 0;
-
- result = cmdline_parser_internal (argc, argv, args_info, ¶ms, NULL);
-
- if (result == EXIT_FAILURE)
- {
- cmdline_parser_free (args_info);
- exit (EXIT_FAILURE);
- }
-
- return result;
-}
-
-int
-cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name)
-{
- int result = EXIT_SUCCESS;
-
- if (cmdline_parser_required2(args_info, prog_name, NULL) > 0)
- result = EXIT_FAILURE;
-
- if (result == EXIT_FAILURE)
- {
- cmdline_parser_free (args_info);
- exit (EXIT_FAILURE);
- }
-
- return result;
-}
-
-int
-cmdline_parser_required2 (struct gengetopt_args_info *args_info, const char *prog_name, const char *additional_error)
-{
- int error = 0;
-
- /* checks for required options */
- if (! args_info->comport_given)
- {
- fprintf (stderr, "%s: '--comport' ('-c') option required%s\n", prog_name, (additional_error ? additional_error : ""));
- error = 1;
- }
-
-
- /* checks for dependences among options */
-
- return error;
-}
-
-int
-cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info,
- struct cmdline_parser_params *params, const char *additional_error)
-{
- int c; /* Character of the parsed option. */
-
- int error = 0;
- struct gengetopt_args_info local_args_info;
-
- int override;
- int initialize;
- int check_required;
- int check_ambiguity;
-
- override = params->override;
- initialize = params->initialize;
- check_required = params->check_required;
- check_ambiguity = params->check_ambiguity;
-
- if (initialize)
- cmdline_parser_init (args_info);
-
- cmdline_parser_init (&local_args_info);
-
- optarg = 0;
- optind = 0;
- opterr = 1;
- optopt = '?';
-
- while (1)
- {
- int option_index = 0;
- char *stop_char;
-
- static struct option long_options[] = {
- { "help", 0, NULL, 'h' },
- { "version", 0, NULL, 'V' },
- { "invert-test", 0, NULL, 'T' },
- { "invert-reset", 0, NULL, 'R' },
- { "telosb", 0, NULL, 0 },
- { "tmote", 0, NULL, 0 },
- { "debug", 0, NULL, 'v' },
- { "f1x", 0, NULL, '1' },
- { "intelhex", 0, NULL, 'I' },
- { "erase", 0, NULL, 'e' },
- { "reset", 0, NULL, 'r' },
- { "program", 1, NULL, 'p' },
- { "comport", 1, NULL, 'c' },
- { NULL, 0, NULL, 0 }
- };
-
- stop_char = 0;
- c = getopt_long (argc, argv, "hVTRv1Ierp:c:", long_options, &option_index);
-
- if (c == -1) break; /* Exit from `while (1)' loop. */
-
- switch (c)
- {
- case 'h': /* Print help and exit. */
- cmdline_parser_print_help ();
- cmdline_parser_free (&local_args_info);
- exit (EXIT_SUCCESS);
-
- case 'V': /* Print version and exit. */
- cmdline_parser_print_version ();
- cmdline_parser_free (&local_args_info);
- exit (EXIT_SUCCESS);
-
- case 'T': /* TEST pin is inverted. */
- if (local_args_info.invert_test_given || (check_ambiguity && args_info->invert_test_given))
- {
- fprintf (stderr, "%s: `--invert-test' (`-T') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->invert_test_given && ! override)
- continue;
- local_args_info.invert_test_given = 1;
- args_info->invert_test_given = 1;
- args_info->invert_test_flag = !(args_info->invert_test_flag);
- break;
-
- case 'R': /* RESET pin is inverted. */
- if (local_args_info.invert_reset_given || (check_ambiguity && args_info->invert_reset_given))
- {
- fprintf (stderr, "%s: `--invert-reset' (`-R') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->invert_reset_given && ! override)
- continue;
- local_args_info.invert_reset_given = 1;
- args_info->invert_reset_given = 1;
- args_info->invert_reset_flag = !(args_info->invert_reset_flag);
- break;
-
- case 'v': /* be verbose for debug purposes. */
- if (local_args_info.debug_given || (check_ambiguity && args_info->debug_given))
- {
- fprintf (stderr, "%s: `--debug' (`-v') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->debug_given && ! override)
- continue;
- local_args_info.debug_given = 1;
- args_info->debug_given = 1;
- args_info->debug_flag = !(args_info->debug_flag);
- break;
-
- case '1': /* Specify CPU family. */
- if (local_args_info.f1x_given || (check_ambiguity && args_info->f1x_given))
- {
- fprintf (stderr, "%s: `--f1x' (`-1') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->f1x_given && ! override)
- continue;
- local_args_info.f1x_given = 1;
- args_info->f1x_given = 1;
- args_info->f1x_flag = !(args_info->f1x_flag);
- break;
-
- case 'I': /* force fileformat to be IntelHex. */
- if (local_args_info.intelhex_given || (check_ambiguity && args_info->intelhex_given))
- {
- fprintf (stderr, "%s: `--intelhex' (`-I') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->intelhex_given && ! override)
- continue;
- local_args_info.intelhex_given = 1;
- args_info->intelhex_given = 1;
- args_info->intelhex_flag = !(args_info->intelhex_flag);
- break;
-
- case 'e': /* erase device. */
- if (local_args_info.erase_given || (check_ambiguity && args_info->erase_given))
- {
- fprintf (stderr, "%s: `--erase' (`-e') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->erase_given && ! override)
- continue;
- local_args_info.erase_given = 1;
- args_info->erase_given = 1;
- args_info->erase_flag = !(args_info->erase_flag);
- break;
-
- case 'r': /* reset device. */
- if (local_args_info.reset_given || (check_ambiguity && args_info->reset_given))
- {
- fprintf (stderr, "%s: `--reset' (`-r') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->reset_given && ! override)
- continue;
- local_args_info.reset_given = 1;
- args_info->reset_given = 1;
- args_info->reset_flag = !(args_info->reset_flag);
- break;
-
- case 'p': /* program file. */
- if (local_args_info.program_given || (check_ambiguity && args_info->program_given))
- {
- fprintf (stderr, "%s: `--program' (`-p') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->program_given && ! override)
- continue;
- local_args_info.program_given = 1;
- args_info->program_given = 1;
- if (args_info->program_arg)
- free (args_info->program_arg); /* free previous string */
- args_info->program_arg = gengetopt_strdup (optarg);
- if (args_info->program_orig)
- free (args_info->program_orig); /* free previous string */
- args_info->program_orig = gengetopt_strdup (optarg);
- break;
-
- case 'c': /* communicate using this device. */
- if (local_args_info.comport_given || (check_ambiguity && args_info->comport_given))
- {
- fprintf (stderr, "%s: `--comport' (`-c') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->comport_given && ! override)
- continue;
- local_args_info.comport_given = 1;
- args_info->comport_given = 1;
- if (args_info->comport_arg)
- free (args_info->comport_arg); /* free previous string */
- args_info->comport_arg = gengetopt_strdup (optarg);
- if (args_info->comport_orig)
- free (args_info->comport_orig); /* free previous string */
- args_info->comport_orig = gengetopt_strdup (optarg);
- break;
-
-
- case 0: /* Long option with no short option */
- /* Assume a TelosB node. */
- if (strcmp (long_options[option_index].name, "telosb") == 0)
- {
- if (local_args_info.telosb_given || (check_ambiguity && args_info->telosb_given))
- {
- fprintf (stderr, "%s: `--telosb' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->telosb_given && ! override)
- continue;
- local_args_info.telosb_given = 1;
- args_info->telosb_given = 1;
- args_info->telosb_flag = !(args_info->telosb_flag);
- }
- /* Assume a Tmote node. */
- else if (strcmp (long_options[option_index].name, "tmote") == 0)
- {
- if (local_args_info.tmote_given || (check_ambiguity && args_info->tmote_given))
- {
- fprintf (stderr, "%s: `--tmote' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->tmote_given && ! override)
- continue;
- local_args_info.tmote_given = 1;
- args_info->tmote_given = 1;
- args_info->tmote_flag = !(args_info->tmote_flag);
- }
-
- break;
- case '?': /* Invalid option. */
- /* `getopt_long' already printed an error message. */
- goto failure;
-
- default: /* bug: option not considered. */
- fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : ""));
- abort ();
- } /* switch */
- } /* while */
-
-
-
- if (check_required)
- {
- error += cmdline_parser_required2 (args_info, argv[0], additional_error);
- }
-
- cmdline_parser_release (&local_args_info);
-
- if ( error )
- return (EXIT_FAILURE);
-
- return 0;
-
-failure:
-
- cmdline_parser_release (&local_args_info);
- return (EXIT_FAILURE);
-}