2018-02-11 23:30:49 +08:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2018 Oticon A/S
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
#ifndef _CMDLINE_COMMON_H
|
|
|
|
#define _CMDLINE_COMMON_H
|
|
|
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define _MAX_LINE_WIDTH 100 /*Total width of the help message*/
|
|
|
|
/* Horizontal alignment of the 2nd column of the help message */
|
|
|
|
#define _LONG_HELP_ALIGN 30
|
|
|
|
|
|
|
|
#define _MAXOPT_SWITCH_LEN 32 /* Maximum allowed length for a switch name */
|
|
|
|
#define _MAXOPT_NAME_LEN 32 /* Maximum allowed length for a variable name */
|
|
|
|
|
|
|
|
#define _HELP_SWITCH "[-h] [--h] [--help] [-?]"
|
|
|
|
#define _HELP_DESCR "Display this help"
|
|
|
|
|
|
|
|
#define _MAX_STRINGY_LEN (_MAXOPT_SWITCH_LEN + _MAXOPT_NAME_LEN + 2 + 1 + 2 + 1)
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Prototype for a callback function when an option is found:
|
|
|
|
* inputs:
|
|
|
|
* argv: Whole argv[i] option as received in main
|
|
|
|
* offset: Offset to the end of the option string
|
|
|
|
* (including a possible ':' or '=')
|
|
|
|
* If the option had a value, it would be placed in &argv[offset]
|
|
|
|
*/
|
|
|
|
typedef void (*option_found_callback_f)(char *argv, int offset);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Structure defining each command line option
|
|
|
|
*/
|
|
|
|
struct args_struct_t {
|
|
|
|
/*
|
|
|
|
* if manual is set cmd_args_parse*() will ignore it except for
|
|
|
|
* displaying it the help messages and initializing <dest> to its
|
|
|
|
* default
|
|
|
|
*/
|
|
|
|
bool manual;
|
|
|
|
/* For help messages, should it be wrapped in "[]" */
|
|
|
|
bool is_mandatory;
|
|
|
|
/* It is just a switch: it does not have something to store after */
|
|
|
|
bool is_switch;
|
|
|
|
/* Option name we search for: --<option> */
|
|
|
|
char *option;
|
|
|
|
/*
|
|
|
|
* Name of the option destination in the help messages:
|
|
|
|
* "--<option>=<name>"
|
|
|
|
*/
|
|
|
|
char *name;
|
|
|
|
/* Type of option (see cmd_read_option_value()) */
|
|
|
|
char type;
|
|
|
|
/* Pointer to where the read value will be stored (may be NULL) */
|
|
|
|
void *dest;
|
|
|
|
/* Optional callback to be called when the switch is found */
|
|
|
|
option_found_callback_f call_when_found;
|
|
|
|
/* Long description for the help messages */
|
|
|
|
char *descript;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define ARG_TABLE_ENDMARKER \
|
|
|
|
{false, false, false, NULL, NULL, 0, NULL, NULL, NULL}
|
|
|
|
|
|
|
|
int cmd_is_option(const char *arg, const char *option, int with_value);
|
|
|
|
int cmd_is_help_option(const char *arg);
|
|
|
|
void cmd_read_option_value(const char *str, void *dest, const char type,
|
|
|
|
const char *option);
|
2018-08-02 17:32:34 +08:00
|
|
|
void cmd_args_set_defaults(struct args_struct_t args_struct[]);
|
|
|
|
bool cmd_parse_one_arg(char *argv, struct args_struct_t args_struct[]);
|
|
|
|
void cmd_print_switches_help(struct args_struct_t args_struct[]);
|
2018-02-11 23:30:49 +08:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* _CMDLINE_COMMON_H */
|