59 lines
1022 B
C
59 lines
1022 B
C
#pragma once
|
|
#include "main.h"
|
|
|
|
#define CMDP_KEY_ARG 1
|
|
|
|
typedef void (*help_filter)(char key, const char *text);
|
|
// key = opt_id, arg = value or NULL
|
|
// key = CMDP_KEY_ARG, arg = id_arg or token
|
|
typedef enum
|
|
{
|
|
CMD_NULL,
|
|
CMD_OK,
|
|
CMD_VALUE_REQ,
|
|
CMD_MULTIVAL_REQ,
|
|
CMD_UNKNOWN,
|
|
} result_t;
|
|
|
|
typedef result_t (*parser)(char key, char *arg);
|
|
|
|
typedef enum
|
|
{
|
|
NO_VALUE = 0,
|
|
SINGLE_VALE = 1,
|
|
MULTI_VALUE = 2,
|
|
NOT_OPTIONAL = 4,
|
|
} option_flags_t;
|
|
|
|
typedef const struct
|
|
{
|
|
uint8_t opt_id;
|
|
char *name;
|
|
char *description;
|
|
option_flags_t flags;
|
|
} option_t;
|
|
|
|
typedef const struct
|
|
{
|
|
char *name;
|
|
uint8_t arg_id;
|
|
char *description;
|
|
option_t *options;
|
|
uint8_t opt_num;
|
|
// parser arg_parser;
|
|
} argument_t;
|
|
|
|
typedef const struct
|
|
{
|
|
char *name;
|
|
char *description;
|
|
argument_t *arguments;
|
|
uint8_t arg_num;
|
|
option_t *options;
|
|
uint8_t opt_num;
|
|
parser cmd_parser;
|
|
} cmd_parser_t;
|
|
|
|
void cmd_parser_init(cmd_parser_t* commands[], uint8_t size);
|
|
// void cmd_parse(char *msg, parser parser);
|
|
void cmd_parse(char *msg); |