/**
* @file cmdline.h
* @author Olaf Kähler
*/

#ifndef _CMDLINE_H_
#define _CMDLINE_H_

#warning "CmdLine is deprecated ! Please use baselib/Config"

#ifdef __cplusplus
#define DEFAULT_ARGUMENT_VALUE(x) = (x)

extern "C" {

#else
#define DEFAULT_ARGUMENT_VALUE(x)
#endif

/** This struct describes a singe command line parameter, with help message,
    default values and so on...
*/
struct CmdLineOption {
	/** The word required on the command line, e.g. "verbose" or "seq"
	    NULL means end of a list of parameters
	*/
	const char *name;

	/** Description of the parameter in the help message
	    NULL means, option is not shown in help
	*/
	const char *description;

	/** Default value, e.g. "~/.config" or "0 0 1"
	   NULL means no default will be set
	*/
	const char *default_value;

	/** scanf-like parameters of the option, e.g. "%s" or "%i %i %i"
	    NULL means no parameters follow
	*/
	const char *parameters;

	/** Storage place for parameters. If there are no parameters, storage
	    will be set to 1 if the option was found, 0 otherwise
	    NULL means, nothing is to be stored
	*/
	void *storage;
};


/** Function to parse the commandline using the structure defined above
	@param argc Number of commandline arguments
	@param argv argv as it is passed to main()
	@param options Array of structures of the options to search for
	@param moreParameters all parameters not recognized are stored here in order of appearance
	@param helpText Text printed in case "help" or "h" is found

	@return 1 if help mode was active
	@return negative number if an error occured
	@return 0 if everything went fine
*/
int parse_arguments(int argc, const char **argv,
		const struct CmdLineOption *options,
		char **moreParameters DEFAULT_ARGUMENT_VALUE(0),
		const char *helpText DEFAULT_ARGUMENT_VALUE(0));

/** Function to print help text using the structure defined above */
int print_help ( const struct CmdLineOption *options, const char *helpText DEFAULT_ARGUMENT_VALUE(0) );

#ifdef __cplusplus
} /* extern C */
#endif

#undef DEFAULT_ARGUMENT_VALUE

#endif

