| /* |
| * 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); |
| 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[]); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _CMDLINE_COMMON_H */ |