darkvater@205: #ifndef CONSOLE_H darkvater@205: #define CONSOLE_H signde@220: darkvater@135: // ** console parser ** // darkvater@135: darkvater@289: typedef enum _iconsole_var_types { darkvater@289: ICONSOLE_VAR_NONE, darkvater@135: ICONSOLE_VAR_BOOLEAN, darkvater@135: ICONSOLE_VAR_BYTE, truelight@543: ICONSOLE_VAR_UINT8, darkvater@135: ICONSOLE_VAR_UINT16, darkvater@135: ICONSOLE_VAR_UINT32, darkvater@135: ICONSOLE_VAR_INT16, darkvater@135: ICONSOLE_VAR_INT32, darkvater@135: ICONSOLE_VAR_STRING, darkvater@135: ICONSOLE_VAR_POINTER, darkvater@141: ICONSOLE_VAR_REFERENCE, darkvater@289: ICONSOLE_VAR_UNKNOWN darkvater@135: } _iconsole_var_types; darkvater@135: truelight@543: typedef enum { truelight@543: ICONSOLE_FULL, truelight@543: ICONSOLE_OPENED, truelight@543: ICONSOLE_CLOSED truelight@543: } _iconsole_modes; truelight@543: darkvater@289: typedef enum _iconsole_hook_types { signde@220: ICONSOLE_HOOK_ACCESS, signde@220: ICONSOLE_HOOK_BEFORE_CHANGE, signde@220: ICONSOLE_HOOK_BEFORE_EXEC, signde@220: ICONSOLE_HOOK_AFTER_CHANGE, darkvater@289: ICONSOLE_HOOK_AFTER_EXEC signde@220: } _iconsole_hook_types; signde@220: darkvater@289: struct _iconsole_var; darkvater@289: typedef bool (*iconsole_var_hook)(struct _iconsole_var* hook_var); darkvater@135: darkvater@289: typedef struct _iconsole_var { darkvater@135: // --------------- // darkvater@289: union { darkvater@289: void* addr; darkvater@289: bool* bool_; darkvater@289: byte* byte_; darkvater@289: uint16* uint16_; darkvater@289: uint32* uint32_; darkvater@289: int16* int16_; darkvater@289: int32* int32_; darkvater@289: char* string_; darkvater@289: struct _iconsole_var* reference_; darkvater@289: } data; darkvater@289: char* name; darkvater@289: _iconsole_var_types type; darkvater@135: // -------------- // darkvater@289: iconsole_var_hook hook_access; darkvater@289: iconsole_var_hook hook_before_change; darkvater@289: iconsole_var_hook hook_after_change; signde@220: // -------------- // darkvater@289: struct _iconsole_var* _next; darkvater@135: bool _malloc; darkvater@289: } _iconsole_var; darkvater@289: darkvater@289: struct _iconsole_cmd; darkvater@289: typedef bool (*iconsole_cmd_hook)(struct _iconsole_cmd* hook_cmd); darkvater@289: darkvater@289: typedef _iconsole_var* (*_iconsole_cmd_addr)(byte argc, char* argv[], byte argt[]); darkvater@289: darkvater@289: typedef struct _iconsole_cmd { darkvater@289: // -------------- // darkvater@289: _iconsole_cmd_addr addr; darkvater@289: char* name; darkvater@289: // -------------- // darkvater@289: iconsole_cmd_hook hook_access; darkvater@289: iconsole_cmd_hook hook_before_exec; darkvater@289: iconsole_cmd_hook hook_after_exec; darkvater@289: // -------------- // darkvater@289: void* _next; darkvater@289: } _iconsole_cmd; darkvater@135: truelight@634: void IConsoleAliasRegister(const char* name, const char* cmdline); truelight@634: truelight@634: typedef struct _iconsole_alias { truelight@634: // -------------- // truelight@634: char * cmdline; truelight@634: char* name; truelight@634: void* _next; truelight@634: } _iconsole_alias; truelight@634: dominik@644: _iconsole_alias* IConsoleAliasGet(const char* name); dominik@644: signde@220: // ** console parser ** // signde@220: darkvater@289: _iconsole_cmd* _iconsole_cmds; // list of registred commands darkvater@289: _iconsole_var* _iconsole_vars; // list of registred vars truelight@634: _iconsole_alias* _iconsole_aliases; // list of registred aliases signde@220: darkvater@141: // ** console colors ** // darkvater@141: VARDEF byte _iconsole_color_default; darkvater@141: VARDEF byte _iconsole_color_error; truelight@248: VARDEF byte _iconsole_color_warning; darkvater@141: VARDEF byte _iconsole_color_debug; darkvater@141: VARDEF byte _iconsole_color_commands; truelight@543: VARDEF _iconsole_modes _iconsole_mode; darkvater@141: darkvater@135: // ** ttd.c functions ** // signde@220: darkvater@289: void SetDebugString(const char* s); darkvater@135: darkvater@135: // ** console functions ** // darkvater@135: darkvater@289: void IConsoleInit(void); darkvater@289: void IConsoleClear(void); darkvater@289: void IConsoleFree(void); darkvater@289: void IConsoleResize(void); darkvater@289: void IConsoleSwitch(void); darkvater@289: void IConsoleClose(void); darkvater@289: void IConsoleOpen(void); darkvater@135: darkvater@141: // ** console cmd buffer ** // darkvater@289: void IConsoleCmdBufferAdd(const char* cmd); darkvater@141: void IConsoleCmdBufferNavigate(signed char direction); darkvater@141: darkvater@135: // ** console output ** // truelight@543: void IConsolePrint(uint16 color_code, const char* string); truelight@543: void CDECL IConsolePrintF(uint16 color_code, const char* s, ...); darkvater@289: void IConsoleDebug(const char* string); darkvater@289: void IConsoleError(const char* string); darkvater@289: void IConsoleWarning(const char* string); darkvater@135: darkvater@135: // *** Commands *** // darkvater@135: darkvater@289: void IConsoleCmdRegister(const char* name, _iconsole_cmd_addr addr); darkvater@289: _iconsole_cmd* IConsoleCmdGet(const char* name); darkvater@135: darkvater@135: // *** Variables *** // darkvater@135: darkvater@289: void IConsoleVarRegister(const char* name, void* addr, _iconsole_var_types type); darkvater@289: void IConsoleVarMemRegister(const char* name, _iconsole_var_types type); truelight@554: void IConsoleVarInsert(_iconsole_var* item_new, const char* name); darkvater@289: _iconsole_var* IConsoleVarGet(const char* name); darkvater@289: _iconsole_var* IConsoleVarAlloc(_iconsole_var_types type); darkvater@289: void IConsoleVarFree(_iconsole_var* var); darkvater@289: void IConsoleVarSetString(_iconsole_var* var, const char* string); darkvater@289: void IConsoleVarSetValue(_iconsole_var* var, int value); darkvater@289: void IConsoleVarDump(const _iconsole_var* var, const char* dump_desc); darkvater@135: darkvater@135: // *** Parser *** // darkvater@135: darkvater@289: void IConsoleCmdExec(const char* cmdstr); darkvater@205: signde@220: // ** console std lib ** // darkvater@289: void IConsoleStdLibRegister(void); signde@220: signde@220: // ** hook code ** // darkvater@289: void IConsoleVarHook(const char* name, _iconsole_hook_types type, iconsole_var_hook proc); darkvater@289: void IConsoleCmdHook(const char* name, _iconsole_hook_types type, iconsole_cmd_hook proc); darkvater@289: bool IConsoleVarHookHandle(_iconsole_var* hook_var, _iconsole_hook_types type); darkvater@289: bool IConsoleCmdHookHandle(_iconsole_cmd* hook_cmd, _iconsole_hook_types type); signde@220: darkvater@205: #endif /* CONSOLE_H */