2009-04-22 20:04:28 +02:00

86 lines
3.1 KiB
C

/*
getopt2.h - getopt1() extension
Copyright (c) 2004 NoisyB <noisyb@gmx.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef MISC_GETOPT2_H
#define MISC_GETOPT2_H
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
#include "getopt.h" // getopt2 needs struct option from getopt1
/*
Extended getopt1(), usage and workflow handling
getopt2_usage() render usage output from st_getopt2_t array
getopt2_parse_usage() parse usage output into st_getopt2_t array (for dev)
getopt2_long() turn st_getopt2_t into struct option for getopt1_long()
getopt2_long_only() turn st_getopt2_t into struct option for getopt1_long_only()
getopt2_short() turn st_getopt2_t into short options string for getopt1_*()
getopt2_get_index_by_val() return single st_getopt2_t by val
OPTION option marker (default: '-')
OPTION_S option marker as string (default: "-")
OPTION_LONG_S long option marker as string (default: "--")
OPTARG optarg separator (default: '=')
OPTARG_S optarg separator as string (default: "=")
<imperative>
you will use THESE everywhere and you will NEVER change them
</imperative>
*/
#define OPTION '-'
#define OPTION_S "-"
#define OPTION_LONG_S "--"
#define OPTARG '='
#define OPTARG_S "="
typedef struct
{
const char *name; // see getopt()
int has_arg; // see getopt()
int *flag; // see getopt()
int val; // see getopt()
const char *arg_name; // name of the options arg as it should be
// displayed in the --help output
// "--name=arg_name" if has_arg == 1
// "--name[=arg_name]" if has_arg == 2
const char *help; // --help, -h, -? output for the current option
void *object; // could be used for workflow objects
} st_getopt2_t;
extern void getopt2_usage (const st_getopt2_t *option);
#ifdef DEBUG
extern void getopt2_parse_usage (const char *usage_output);
#endif
extern int getopt2_long (struct option *long_option, const st_getopt2_t *option, int n);
extern int getopt2_long_only (struct option *long_option, const st_getopt2_t *option, int n);
extern int getopt2_short (char *short_option, const st_getopt2_t *option, int n);
extern const st_getopt2_t *getopt2_get_index_by_val (const st_getopt2_t *option, int val);
#ifdef __cplusplus
}
#endif
#endif // MISC_GETOPT2_H