2018-01-21 23:35:22 +01:00
|
|
|
/* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
/** definitions to build menus (API)
|
|
|
|
* @file menu.h
|
|
|
|
* @author King Kévin <kingkevin@cuvoodoo.info>
|
|
|
|
* @date 2018
|
|
|
|
*/
|
|
|
|
|
|
|
|
/** types of argument accepted by the command */
|
|
|
|
enum menu_argument_t {
|
|
|
|
MENU_ARGUMENT_NONE, /**< no argument accepted */
|
|
|
|
MENU_ARGUMENT_SIGNED, /**< int32 argument accepted */
|
|
|
|
MENU_ARGUMENT_UNSIGNED, /**< uint32 argument accepted */
|
|
|
|
MENU_ARGUMENT_FLOAT, /**< double argument accepted */
|
|
|
|
MENU_ARGUMENT_STRING, /**< string argument accepted */
|
|
|
|
};
|
|
|
|
|
|
|
|
/** command menu entry */
|
|
|
|
struct menu_command_t {
|
|
|
|
char shortcut; /**< short command code (0 if not available) */
|
|
|
|
char* name; /**< complete name of the command (space-free) */
|
|
|
|
char* command_description; /**< human readable description of the command purpose */
|
|
|
|
enum menu_argument_t argument; /**< what kind of argument it accepts */
|
|
|
|
char* argument_description; /**< human readable description of the argument it can accept */
|
|
|
|
void (*command_handler)(void* argument); /**< function to be called to handle this command */
|
|
|
|
};
|
|
|
|
|
|
|
|
/** parse command from line and call corresponding command
|
|
|
|
* @param[in] line use input to parse
|
|
|
|
* @param[in] command_list list of available commands
|
|
|
|
* @prarm[in] command_list_length number of available commands
|
|
|
|
* @return if an command corresponding to the line has been found and called
|
|
|
|
*/
|
2018-01-22 21:41:52 +01:00
|
|
|
bool menu_handle_command(const char* line, const struct menu_command_t* command_list, size_t command_list_length);
|
2018-01-21 23:35:22 +01:00
|
|
|
/** print the commands from the command list
|
|
|
|
* @param[in] command_list list of available commands
|
|
|
|
* @prarm[in] command_list_length number of available commands
|
|
|
|
*/
|
|
|
|
void menu_print_commands(const struct menu_command_t* command_list, size_t command_list_length);
|
|
|
|
|