summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--console.c111
-rw-r--r--console.h2
-rw-r--r--console_cmds.c80
3 files changed, 122 insertions, 71 deletions
diff --git a/console.c b/console.c
index ed4644377..ce2b654ed 100644
--- a/console.c
+++ b/console.c
@@ -439,6 +439,7 @@ void IConsoleCmdRegister(const char* name, _iconsole_cmd_addr addr)
char* _new;
_iconsole_cmd* item;
_iconsole_cmd* item_new;
+ _iconsole_cmd* item_before;
_new = strdup(name);
@@ -452,13 +453,39 @@ void IConsoleCmdRegister(const char* name, _iconsole_cmd_addr addr)
item_new->hook_after_exec = NULL;
item_new->hook_before_exec = NULL;
+ item_before = NULL;
item = _iconsole_cmds;
+
if (item == NULL) {
_iconsole_cmds = item_new;
} else {
- while (item->_next != NULL) item = item->_next;
- item->_next = item_new;
+ while ((item->_next != NULL) && (strcmp(item->name,item_new->name)<=0)) {
+ item_before = item;
+ item = item->_next;
+ }
+// insertion sort
+ if (item_before==NULL) {
+ if (strcmp(item->name,item_new->name)<=0) {
+ // appending
+ item ->_next = item_new;
+ } else {
+ // inserting as startitem
+ _iconsole_cmds = item_new;
+ item_new ->_next = item;
+ }
+ } else {
+ if (strcmp(item->name,item_new->name)<=0) {
+ // appending
+ item ->_next = item_new;
+ } else {
+ // inserting
+ item_new ->_next = item_before->_next;
+ item_before ->_next = item_new;
+ }
+ }
+// insertion sort end
}
+
}
_iconsole_cmd* IConsoleCmdGet(const char* name)
@@ -473,17 +500,58 @@ _iconsole_cmd* IConsoleCmdGet(const char* name)
return NULL;
}
-void IConsoleVarRegister(const char* name, void* addr, _iconsole_var_types type)
+void IConsoleVarInsert(_iconsole_var* item_new, const char* name)
{
_iconsole_var* item;
- _iconsole_var* item_new;
+ _iconsole_var* item_before;
- item_new = malloc(sizeof(_iconsole_var)); /* XXX unchecked malloc */
+ item_new->_next = NULL;
item_new->name = malloc(strlen(name) + 2); /* XXX unchecked malloc */
sprintf(item_new->name, "%s", name);
+ item_before = NULL;
+ item = _iconsole_vars;
+
+ if (item == NULL) {
+ _iconsole_vars = item_new;
+ } else {
+ while ((item->_next != NULL) && (strcmp(item->name,item_new->name)<=0)) {
+ item_before = item;
+ item = item->_next;
+ }
+// insertion sort
+ if (item_before==NULL) {
+ if (strcmp(item->name,item_new->name)<=0) {
+ // appending
+ item ->_next = item_new;
+ } else {
+ // inserting as startitem
+ _iconsole_vars = item_new;
+ item_new ->_next = item;
+ }
+ } else {
+ if (strcmp(item->name,item_new->name)<=0) {
+ // appending
+ item ->_next = item_new;
+ } else {
+ // inserting
+ item_new ->_next = item_before->_next;
+ item_before ->_next = item_new;
+ }
+ }
+// insertion sort end
+ }
+}
+
+void IConsoleVarRegister(const char* name, void* addr, _iconsole_var_types type)
+{
+ _iconsole_var* item_new;
+
+ item_new = malloc(sizeof(_iconsole_var)); /* XXX unchecked malloc */
+
item_new->_next = NULL;
+
switch (type) {
case ICONSOLE_VAR_BOOLEAN:
item_new->data.bool_ = addr;
@@ -511,20 +579,16 @@ void IConsoleVarRegister(const char* name, void* addr, _iconsole_var_types type)
error("unknown console variable type");
break;
}
+
+ IConsoleVarInsert(item_new, name);
+
item_new->type = type;
item_new->_malloc = false;
item_new->hook_access = NULL;
item_new->hook_after_change = NULL;
item_new->hook_before_change = NULL;
-
- item = _iconsole_vars;
- if (item == NULL) {
- _iconsole_vars = item_new;
- } else {
- while (item->_next != NULL) item = item->_next;
- item->_next = item_new;
- }
+
}
void IConsoleVarMemRegister(const char* name, _iconsole_var_types type)
@@ -534,27 +598,6 @@ void IConsoleVarMemRegister(const char* name, _iconsole_var_types type)
IConsoleVarInsert(item, name);
}
-
-void IConsoleVarInsert(_iconsole_var* var, const char* name)
-{
- _iconsole_var* item;
-
- // disallow building variable rings
- if (var->_next != NULL) return;
-
- var->name = malloc(strlen(name) + 2); /* XXX unchecked malloc */
- sprintf(var->name, "%s", name);
-
- item = _iconsole_vars;
- if (item == NULL) {
- _iconsole_vars = var;
- } else {
- while (item->_next != NULL) item = item->_next;
- item->_next = var;
- }
-}
-
-
_iconsole_var* IConsoleVarGet(const char* name)
{
_iconsole_var* item;
diff --git a/console.h b/console.h
index b537786de..c35b28e7f 100644
--- a/console.h
+++ b/console.h
@@ -123,7 +123,7 @@ _iconsole_cmd* IConsoleCmdGet(const char* name);
void IConsoleVarRegister(const char* name, void* addr, _iconsole_var_types type);
void IConsoleVarMemRegister(const char* name, _iconsole_var_types type);
-void IConsoleVarInsert(_iconsole_var* var, const char* name);
+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);
diff --git a/console_cmds.c b/console_cmds.c
index e59d7124b..0d6c9206e 100644
--- a/console_cmds.c
+++ b/console_cmds.c
@@ -52,6 +52,10 @@ DEF_CONSOLE_CMD_HOOK(ConCmdHookNoNetwork)
DEF_CONSOLE_VAR_HOOK(ConVarHookNoNetClient)
{
+ if (!_network_available) {
+ IConsoleError("You can not use this command because there is no network available.");
+ return false;
+ }
if (!_network_server) {
IConsoleError("This variable only makes sense for a network server.");
return false;
@@ -61,7 +65,11 @@ DEF_CONSOLE_VAR_HOOK(ConVarHookNoNetClient)
DEF_CONSOLE_CMD_HOOK(ConCmdHookNoNetClient)
{
- if (!_networking || !_network_server) {
+ if (!_network_available) {
+ IConsoleError("You can not use this command because there is no network available.");
+ return false;
+ }
+ if (!_network_server) {
IConsoleError("This command is only available for a network server.");
return false;
}
@@ -70,8 +78,12 @@ DEF_CONSOLE_CMD_HOOK(ConCmdHookNoNetClient)
DEF_CONSOLE_CMD_HOOK(ConCmdHookNoNetServer)
{
- if (!_networking || _network_server) {
- IConsoleError("You can not use this command for you are a network-server.");
+ if (!_network_available) {
+ IConsoleError("You can not use this command because there is no network available.");
+ return false;
+ }
+ if (_network_server) {
+ IConsoleError("You can not use this command because you are a network-server.");
return false;
}
return true;
@@ -79,6 +91,10 @@ DEF_CONSOLE_CMD_HOOK(ConCmdHookNoNetServer)
DEF_CONSOLE_CMD_HOOK(ConCmdHookNeedNetwork)
{
+ if (!_network_available) {
+ IConsoleError("You can not use this command because there is no network available.");
+ return false;
+ }
if (!_networking) {
IConsoleError("Not connected. Multiplayer only command.");
return false;
@@ -618,10 +634,12 @@ DEF_CONSOLE_CMD(ConSetPassword) {
void IConsoleDebugLibRegister()
{
- // stdlib
+ // debugging variables and functions
extern bool _stdlib_con_developer; /* XXX extern in .c */
IConsoleVarRegister("con_developer", &_stdlib_con_developer, ICONSOLE_VAR_BOOLEAN);
+ IConsoleVarMemRegister("temp_string", ICONSOLE_VAR_STRING);
+ IConsoleVarMemRegister("temp_string2", ICONSOLE_VAR_STRING);
IConsoleVarMemRegister("temp_bool", ICONSOLE_VAR_BOOLEAN);
IConsoleVarMemRegister("temp_int16", ICONSOLE_VAR_INT16);
IConsoleVarMemRegister("temp_int32", ICONSOLE_VAR_INT32);
@@ -629,8 +647,6 @@ void IConsoleDebugLibRegister()
IConsoleVarMemRegister("temp_uint16", ICONSOLE_VAR_UINT16);
IConsoleVarMemRegister("temp_uint16_2", ICONSOLE_VAR_UINT16);
IConsoleVarMemRegister("temp_uint32", ICONSOLE_VAR_UINT32);
- IConsoleVarMemRegister("temp_string", ICONSOLE_VAR_STRING);
- IConsoleVarMemRegister("temp_string2", ICONSOLE_VAR_STRING);
IConsoleCmdRegister("resettile", ConResetTile);
}
#endif
@@ -644,16 +660,7 @@ void IConsoleStdLibRegister(void)
// stdlib
extern byte _stdlib_developer; /* XXX extern in .c */
-#ifdef _DEBUG
- IConsoleDebugLibRegister();
-#endif
-
- // functions [please add them alphabetically]
-#ifdef ENABLE_NETWORK
- IConsoleCmdRegister("connect", ConNetworkConnect);
- IConsoleCmdHook("connect", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetServer);
- IConsoleCmdRegister("clients", ConNetworkClients);
-#endif /* ENABLE_NETWORK */
+ // default variables and functions
IConsoleCmdRegister("debug_level", ConDebugLevel);
IConsoleCmdRegister("dump_vars", ConListDumpVariables);
IConsoleCmdRegister("echo", ConEcho);
@@ -665,22 +672,20 @@ void IConsoleStdLibRegister(void)
IConsoleCmdRegister("info_var", ConInfoVar);
IConsoleCmdRegister("list_cmds", ConListCommands);
IConsoleCmdRegister("list_vars", ConListVariables);
-#ifdef ENABLE_NETWORK
- IConsoleCmdRegister("kick", ConKick);
- IConsoleCmdHook("kick", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetClient);
- IConsoleCmdRegister("protect", ConProtect);
- IConsoleCmdRegister("name", ConClientName);
-#endif
IConsoleCmdRegister("newgame", ConNewGame);
IConsoleCmdRegister("printf", ConPrintF);
IConsoleCmdRegister("printfc", ConPrintFC);
IConsoleCmdRegister("quit", ConExit);
IConsoleCmdRegister("random", ConRandom);
IConsoleCmdRegister("resetengines", ConResetEngines);
-#ifdef ENABLE_NETWORK
- IConsoleCmdHook("resetengines", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetwork);
-#endif /* ENABLE_NETWORK */
IConsoleCmdRegister("return", ConReturn);
+ IConsoleCmdRegister("screenshot", ConScreenShot);
+ IConsoleCmdRegister("script", ConScript);
+ IConsoleCmdRegister("scrollto", ConScrollToTile);
+
+ IConsoleVarRegister("developer", &_stdlib_developer, ICONSOLE_VAR_BYTE);
+
+ // networking variables and functions
#ifdef ENABLE_NETWORK
IConsoleCmdRegister("say", ConSay);
IConsoleCmdHook("say", ICONSOLE_HOOK_ACCESS, ConCmdHookNeedNetwork);
@@ -688,28 +693,31 @@ void IConsoleStdLibRegister(void)
IConsoleCmdHook("say_player", ICONSOLE_HOOK_ACCESS, ConCmdHookNeedNetwork);
IConsoleCmdRegister("say_client", ConSayClient);
IConsoleCmdHook("say_client", ICONSOLE_HOOK_ACCESS, ConCmdHookNeedNetwork);
-#endif /* ENABLE_NETWORK */
- IConsoleCmdRegister("screenshot", ConScreenShot);
- IConsoleCmdRegister("script", ConScript);
- IConsoleCmdRegister("scrollto", ConScrollToTile);
-#ifdef ENABLE_NETWORK
+ IConsoleCmdRegister("kick", ConKick);
+ IConsoleCmdHook("kick", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetClient);
+ IConsoleCmdRegister("protect", ConProtect);
+ IConsoleCmdRegister("name", ConClientName);
+ IConsoleCmdRegister("connect", ConNetworkConnect);
+ IConsoleCmdHook("connect", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetServer);
+ IConsoleCmdRegister("clients", ConNetworkClients);
IConsoleCmdRegister("setservername", ConSetServerName);
IConsoleCmdHook("setservername", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetClient);
IConsoleCmdRegister("setpassword", ConSetPassword);
IConsoleCmdHook("setpassword", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetClient);
IConsoleCmdRegister("status", ConStatus);
IConsoleCmdHook("status", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetClient);
-#endif /* ENABLE_NETWORK */
+ IConsoleCmdHook("resetengines", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetwork);
- // variables [please add them alphabeticaly]
- IConsoleVarRegister("developer", &_stdlib_developer, ICONSOLE_VAR_BYTE);
-#ifdef ENABLE_NETWORK
IConsoleVarRegister("net_frame_freq", &_network_frame_freq, ICONSOLE_VAR_UINT8);
- IConsoleVarHook("*net_frame_freq", ICONSOLE_HOOK_ACCESS, ConVarHookNoNetClient);
+ IConsoleVarHook("net_frame_freq", ICONSOLE_HOOK_ACCESS, ConVarHookNoNetClient);
IConsoleVarRegister("net_sync_freq", &_network_sync_freq, ICONSOLE_VAR_UINT16);
- IConsoleVarHook("*net_sync_freq", ICONSOLE_HOOK_ACCESS, ConVarHookNoNetClient);
+ IConsoleVarHook("net_sync_freq", ICONSOLE_HOOK_ACCESS, ConVarHookNoNetClient);
#endif /* ENABLE_NETWORK */
+ // debugging stuff
+#ifdef _DEBUG
+ IConsoleDebugLibRegister();
+#endif
}
/* -------------------- don't cross this line --------------------- */