/** * Copyright (c) 2025 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "consolevar.h" #include "consolecmd.h" typedef enum { CONSOLE_EXEC_STATE_INITIAL, CONSOLE_EXEC_STATE_PARSE_CMD, CONSOLE_EXEC_STATE_CMD_PARSED, CONSOLE_EXEC_STATE_FIND_ARG, CONSOLE_EXEC_STATE_PARSE_ARG, CONSOLE_EXEC_STATE_PARSE_ARG_QUOTED, CONSOLE_EXEC_STATE_ARG_PARSED, CONSOLE_EXEC_STATE_CMD_FINISHED, CONSOLE_EXEC_STATE_FULLY_PARSED } consoleexecstate_t; typedef struct { consolecmd_t commands[CONSOLE_COMMANDS_MAX]; uint32_t commandCount; consolevar_t variables[CONSOLE_VARIABLES_MAX]; uint32_t variableCount; char_t line[CONSOLE_HISTORY_MAX][CONSOLE_LINE_MAX]; consolecmdexec_t execBuffer[CONSOLE_EXEC_BUFFER_MAX]; uint32_t execBufferCount; consolecmd_t *cmdGet; consolecmd_t *cmdSet; pthread_mutex_t lock; // Mutex for thread safety // May move these later char_t inputBuffer[CONSOLE_LINE_MAX]; int32_t inputIndex; bool_t open; } console_t; extern console_t CONSOLE; /** * Initializes the console. */ void consoleInit(); /** * Registers a console command. * * @param name The name of the command. * @param function The function to execute when the command is called. * @return The registered command. */ consolecmd_t * consoleRegCmd(const char_t *name, consolecmdfunc_t function); /** * Registers a console variable. * * @param name The name of the variable. * @param value The initial value of the variable. * @param event The event to register. * @return The registered variable. */ consolevar_t * consoleRegVar( const char_t *name, const char_t *value, consolevarchanged_t event ); /** * Sets the value of a console variable. * * @param name The name of the variable. * @param value The new value of the variable. */ void consolePrint( const char_t *message, ... ); /** * Executes a console command. * * @param line The line to execute. */ void consoleExec(const char_t *line); /** * Processes the console's pending commands. */ void consoleProcess(); /** * Updates the console's input buffer and handles user input. */ void consoleUpdate(); /** * Draws the console's output. */ void consoleDraw(); void cmdGet(const consolecmdexec_t *exec); void cmdSet(const consolecmdexec_t *exec); void cmdEcho(const consolecmdexec_t *exec);