/* actionparser.h - Action parser for ck -------------------------------*- C -*- * * This file is part of ck, the config keeper * * ----------------------------------------------------------------------------- * * Copyright (C) 2018 Anastasis Grammenos * GPLv3 (see LICENCE for the full notice) * * ----------------------------------------------------------------------------- * * The code here and in actionparser.c is responsible for parsing * the user's input from the command line and return a struct * of the user's options ready to be handled by the rest of the * procedures. * * -------------------------------------------------------------------------- */ #ifndef ACTIONPARSER_H #define ACTIONPARSER_H #include "cklist.h" #define CK_ACTIONS \ X(INIT) \ X(ADD) \ X(DEL) \ X(EDIT) \ X(LIST) \ X(SEARCH) \ X(HELP) enum ParseErrors { PERR_NOERR = 0, #define X(ACTION) \ PERR_##ACTION##_WRONG, CK_ACTIONS #undef X PERR_UNKONW_ACTION, }; typedef enum ParseErrors ParseError; enum CkActions { CK_WRONG_ACTION, #define X(ACTION) \ CKA_##ACTION, CK_ACTIONS #undef X }; typedef enum CkActions CkAction; enum ActionParserResults { APR_OK, APR_ERR, APR_HELP, APR_VERSION }; typedef enum ActionParserResults ActionParseResult; typedef struct UserOptions UserOpt; struct UserOptions { ParseError err; CkAction action; char *confDir; cklist *args; }; /* Parse cli args, fill UserOpt struct * and return the result enum */ extern int parse_action(int argc, char* argv[], UserOpt *opt); extern CkAction parser_get_action(const char *name, char *actionName); extern void get_possible_action_strings(char *dest, CkAction ckAction); extern void free_user_opt(UserOpt *opt); #endif // ACTIONPARSER_H