71 lines
1.8 KiB
C
71 lines
1.8 KiB
C
#ifndef BH_ARGS_H
|
|
#define BH_ARGS_H
|
|
|
|
|
|
#include "Common.h"
|
|
|
|
|
|
#define BH_ARGS_ARGUMENT 0
|
|
#define BH_ARGS_UNKNOWN -1
|
|
|
|
#define BH_ARGS_VALUE 1
|
|
#define BH_ARGS_OPTIONAL 2
|
|
|
|
|
|
typedef struct BH_ArgsOption
|
|
{
|
|
int key;
|
|
const char *name;
|
|
int flags;
|
|
const char *description;
|
|
} BH_ArgsOption;
|
|
|
|
|
|
typedef int (*BH_ArgsCallback)(int key, char *arg, void *data);
|
|
|
|
|
|
/**
|
|
* Parses command line \a options (given by \a argc and \a argv) and calls the
|
|
* specified \a callback with \a data.
|
|
*
|
|
* There are few internal rules:
|
|
* - If the "--" argument is specified, option parsing stops, and the rest of
|
|
* the arguments are processed as is.
|
|
* - If the "-" argument is specified, it is processed as is.
|
|
* - For long options, if a value is required, the string after the equal sign
|
|
* or the next argument will be used as the value ("--define=Value" or
|
|
* "--define Value").
|
|
* - For short options, if a value is required, the string after the option
|
|
* letter or the next argument will be used as the value ("-DValue" or
|
|
* "-D Value").
|
|
*
|
|
* Options array should have last element filled with zeros.
|
|
*
|
|
* \param argc Arguments count
|
|
* \param argv Arguments array
|
|
* \param options Options array pointer
|
|
* \param callback Callback function
|
|
* \param data Callback data
|
|
*
|
|
* \return On success, returns zero value.
|
|
* \return On failure, returns error code.
|
|
*/
|
|
int BH_ArgsParse(int argc,
|
|
char **argv,
|
|
BH_ArgsOption *options,
|
|
BH_ArgsCallback callback,
|
|
void *data);
|
|
|
|
|
|
/**
|
|
* Prints documentation for \a options (with specified \a padding).
|
|
*
|
|
* \param options Options array pointer
|
|
* \param padding Padding
|
|
*/
|
|
void BH_ArgsHelp(BH_ArgsOption *options,
|
|
int padding);
|
|
|
|
|
|
#endif /* BH_ARGS_H */
|