1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
/******************************************************************************
**
** double_clp.c
**
** Sun Nov 13 12:56:09 2016
** Linux 4.6.0 (#7 Fri Jun 17 22:37:23 CEST 2016) i686
** linux@mgpc (Michael Geng)
**
** C file for command line parser
**
** Automatically created by genparse v0.9.3
**
** See http://genparse.sourceforge.net for details and updates
**
******************************************************************************/
#include <string.h>
#include <stdlib.h>
#include <getopt.h>
#include "error.h"
#include "xstrtod.h"
#include "xstrtod.h"
#include "double_clp.h"
static struct option const long_options[] =
{
{"aparam", required_argument, NULL, 'a'},
{"bparam", required_argument, NULL, 'b'},
{"cparam", required_argument, NULL, 'c'},
{"help", no_argument, NULL, 'h'},
{"version", no_argument, NULL, 'v'},
{NULL, 0, NULL, 0}
};
/*----------------------------------------------------------------------------
**
** Cmdline ()
**
** Parse the argv array of command line parameters
**
**--------------------------------------------------------------------------*/
void Cmdline (struct arg_t *my_args, int argc, char *argv[])
{
extern char *optarg;
extern int optind;
int c;
int errflg = 0;
my_args->a = 0;
my_args->b = 2;
my_args->h = false;
my_args->v = false;
optind = 0;
while ((c = getopt_long (argc, argv, "a:b:c:hv", long_options, &optind)) != - 1)
{
switch (c)
{
case 'a':
if (! xstrtod (optarg, NULL, &my_args->a, strtod))
error (EXIT_FAILURE, 0, "could not convert %s to double", optarg);
break;
case 'b':
if (! xstrtod (optarg, NULL, &my_args->b, strtod))
error (EXIT_FAILURE, 0, "could not convert %s to double", optarg);
if (my_args->b < 2)
{
fprintf (stderr, "parameter range error: b must be >= 2\n");
errflg++;
}
if (my_args->b > 5)
{
fprintf (stderr, "parameter range error: b must be <= 5\n");
errflg++;
}
break;
case 'c':
if (! xstrtod (optarg, NULL, &my_args->c, strtod))
error (EXIT_FAILURE, 0, "could not convert %s to double", optarg);
if (my_args->c < 2)
{
fprintf (stderr, "parameter range error: c must be >= 2\n");
errflg++;
}
if (my_args->c > 5)
{
fprintf (stderr, "parameter range error: c must be <= 5\n");
errflg++;
}
break;
case 'h':
my_args->h = true;
usage (EXIT_SUCCESS, argv[0]);
break;
case 'v':
my_args->v = true;
break;
default:
usage (EXIT_FAILURE, argv[0]);
}
} /* while */
if (errflg)
usage (EXIT_FAILURE, argv[0]);
if (optind >= argc)
my_args->optind = 0;
else
my_args->optind = optind;
}
/*----------------------------------------------------------------------------
**
** usage ()
**
** Print out usage information, then exit
**
**--------------------------------------------------------------------------*/
void usage (int status, char *program_name)
{
if (status != EXIT_SUCCESS)
fprintf (stderr, "Try `%s --help' for more information.\n",
program_name);
else
{
printf ("\
usage: %s [ -abchv ] \n\
[ -a ] [ --aparam ] (type=DOUBLE, default=0)\n\
This is a double parameter\n\
[ -b ] [ --bparam ] (type=DOUBLE, range=2...5, default=2)\n\
This parameter must be in the range 2...5\n\
[ -c ] [ --cparam ] (type=DOUBLE, range=2...5,)\n\
This parameter has no default value\n\
[ -h ] [ --help ] (type=FLAG)\n\
Display this help and exit.\n\
[ -v ] [ --version ] (type=FLAG)\n\
Output version information and exit.\n", program_name);
}
exit (status);
}
|