console.h
author bjarni
Mon, 24 Jan 2005 18:21:23 +0000
changeset 1139 c63f257aa7fb
parent 644 e833509107ad
child 1230 701163ef52b8
permissions -rw-r--r--
(svn r1640) fix: now helicopters will use a hangar in schedule to be replaced in, even if they are only set to service there. Since helicopters are serviced at helipads, they will only go there if they needs to be replaced or renewed.
#ifndef CONSOLE_H
#define CONSOLE_H

// ** console parser ** //

typedef enum _iconsole_var_types {
	ICONSOLE_VAR_NONE,
	ICONSOLE_VAR_BOOLEAN,
	ICONSOLE_VAR_BYTE,
	ICONSOLE_VAR_UINT8,
	ICONSOLE_VAR_UINT16,
	ICONSOLE_VAR_UINT32,
	ICONSOLE_VAR_INT16,
	ICONSOLE_VAR_INT32,
	ICONSOLE_VAR_STRING,
	ICONSOLE_VAR_POINTER,
	ICONSOLE_VAR_REFERENCE,
	ICONSOLE_VAR_UNKNOWN
} _iconsole_var_types;

typedef enum {
	ICONSOLE_FULL,
	ICONSOLE_OPENED,
	ICONSOLE_CLOSED
} _iconsole_modes;

typedef enum _iconsole_hook_types {
	ICONSOLE_HOOK_ACCESS,
	ICONSOLE_HOOK_BEFORE_CHANGE,
	ICONSOLE_HOOK_BEFORE_EXEC,
	ICONSOLE_HOOK_AFTER_CHANGE,
	ICONSOLE_HOOK_AFTER_EXEC
} _iconsole_hook_types;

struct _iconsole_var;
typedef bool (*iconsole_var_hook)(struct _iconsole_var* hook_var);

typedef struct _iconsole_var {
	// --------------- //
	union {
		void*   addr;
		bool*   bool_;
		byte*   byte_;
		uint16* uint16_;
		uint32* uint32_;
		int16*  int16_;
		int32*  int32_;
		char*   string_;
		struct _iconsole_var* reference_;
	} data;
	char* name;
	_iconsole_var_types type;
	// -------------- //
	iconsole_var_hook hook_access;
	iconsole_var_hook hook_before_change;
	iconsole_var_hook hook_after_change;
	// -------------- //
	struct _iconsole_var* _next;
	bool _malloc;
} _iconsole_var;

struct _iconsole_cmd;
typedef bool (*iconsole_cmd_hook)(struct _iconsole_cmd* hook_cmd);

typedef _iconsole_var* (*_iconsole_cmd_addr)(byte argc, char* argv[], byte argt[]);

typedef struct _iconsole_cmd {
	// -------------- //
	_iconsole_cmd_addr addr;
	char* name;
	// -------------- //
	iconsole_cmd_hook hook_access;
	iconsole_cmd_hook hook_before_exec;
	iconsole_cmd_hook hook_after_exec;
	// -------------- //
	void* _next;
} _iconsole_cmd;

void IConsoleAliasRegister(const char* name, const char* cmdline);

typedef struct _iconsole_alias {
	// -------------- //
	char * cmdline;
	char* name;
	void* _next;
} _iconsole_alias;

_iconsole_alias* IConsoleAliasGet(const char* name);

// ** console parser ** //

_iconsole_cmd* _iconsole_cmds; // list of registred commands
_iconsole_var* _iconsole_vars; // list of registred vars
_iconsole_alias* _iconsole_aliases; // list of registred aliases

// ** console colors ** //
VARDEF byte _iconsole_color_default;
VARDEF byte _iconsole_color_error;
VARDEF byte _iconsole_color_warning;
VARDEF byte _iconsole_color_debug;
VARDEF byte _iconsole_color_commands;
VARDEF _iconsole_modes _iconsole_mode;

// ** ttd.c functions ** //

void SetDebugString(const char* s);

// ** console functions ** //

void IConsoleInit(void);
void IConsoleClear(void);
void IConsoleFree(void);
void IConsoleResize(void);
void IConsoleSwitch(void);
void IConsoleClose(void);
void IConsoleOpen(void);

// ** console cmd buffer ** //
void IConsoleCmdBufferAdd(const char* cmd);
void IConsoleCmdBufferNavigate(signed char direction);

// ** console output ** //
void IConsolePrint(uint16 color_code, const char* string);
void CDECL IConsolePrintF(uint16 color_code, const char* s, ...);
void IConsoleDebug(const char* string);
void IConsoleError(const char* string);
void IConsoleWarning(const char* string);

// *** Commands *** //

void IConsoleCmdRegister(const char* name, _iconsole_cmd_addr addr);
_iconsole_cmd* IConsoleCmdGet(const char* name);

// *** Variables *** //

void IConsoleVarRegister(const char* name, void* addr, _iconsole_var_types type);
void IConsoleVarMemRegister(const char* name, _iconsole_var_types type);
void IConsoleVarInsert(_iconsole_var* item_new, const char* name);
_iconsole_var* IConsoleVarGet(const char* name);
_iconsole_var* IConsoleVarAlloc(_iconsole_var_types type);
void IConsoleVarFree(_iconsole_var* var);
void IConsoleVarSetString(_iconsole_var* var, const char* string);
void IConsoleVarSetValue(_iconsole_var* var, int value);
void IConsoleVarDump(const _iconsole_var* var, const char* dump_desc);

// *** Parser *** //

void IConsoleCmdExec(const char* cmdstr);

// ** console std lib ** //
void IConsoleStdLibRegister(void);

// ** hook code ** //
void IConsoleVarHook(const char* name, _iconsole_hook_types type, iconsole_var_hook proc);
void IConsoleCmdHook(const char* name, _iconsole_hook_types type, iconsole_cmd_hook proc);
bool IConsoleVarHookHandle(_iconsole_var* hook_var, _iconsole_hook_types type);
bool IConsoleCmdHookHandle(_iconsole_cmd* hook_cmd, _iconsole_hook_types type);

#endif /* CONSOLE_H */