diff --git a/console_cmds.c b/console_cmds.c --- a/console_cmds.c +++ b/console_cmds.c @@ -1,387 +1,391 @@ -/* -------------------- dont cross this line --------------------- */ -#include "stdafx.h" -#include "ttd.h" -#include "console.h" -#include "engine.h" -#include "functions.h" -#include "variables.h" - -#if defined(WIN32) -# define ENABLE_NETWORK -#endif - -// ** console command / variable defines ** // -#define DEF_CONSOLE_CMD(yyyy) static _iconsole_var * yyyy(byte argc, byte* argv[], byte argt[]) -#define DEF_CONSOLE_CMD_HOOK(yyyy) static bool yyyy(_iconsole_cmd * hookcmd) -#define DEF_CONSOLE_VAR_HOOK(yyyy) static bool yyyy(_iconsole_var * hookvar) - -static int32 GetArgumentInteger(byte *arg) -{ - int32 result; - sscanf((char *)arg, "%u", &result); - - if (result == 0 && arg[0] == '0' && arg[1] == 'x') - sscanf((char *)arg, "%x", &result); - - return result; -} - -/* **************************** */ -/* variable and command hooks */ -/* **************************** */ - -DEF_CONSOLE_CMD_HOOK(ConCmdHookNoNetwork) -{ - if (_networking) { - IConsoleError("this command is forbidden in multiplayer"); - return false; - } - return true; -} - -DEF_CONSOLE_VAR_HOOK(ConVarHookNoNetwork) -{ - if (_networking) { - IConsoleError("this variable is forbidden in multiplayer"); - return false; - } - return true; -} - -DEF_CONSOLE_VAR_HOOK(ConVarHookNoNetClient) -{ - if (!_networking_server) { - IConsoleError("this variable only makes sense for a network server"); - return false; - } - return true; -} - -/* **************************** */ -/* reset commands */ -/* **************************** */ - -DEF_CONSOLE_CMD(ConResetEngines) -{ - StartupEngines(); - return 0; -} - -DEF_CONSOLE_CMD(ConResetTile) -{ - if (argc == 2) { - TileIndex tile = (TileIndex)GetArgumentInteger(argv[1]); - DoClearSquare(tile); - } - - return 0; -} - -DEF_CONSOLE_CMD(ConScrollToTile) -{ - if (argc == 2) { - TileIndex tile = (TileIndex)GetArgumentInteger(argv[1]); - ScrollMainWindowToTile(tile); - } - - return 0; -} - -// ********************************* // -// * Network Core Console Commands * // -// ********************************* // -#ifdef ENABLE_NETWORK - -DEF_CONSOLE_CMD(ConNetworkConnect) -{ - byte * b; - byte * ip = NULL; - byte * port = NULL; - byte * player = NULL; - byte c; - uint16 rport; - - if (argc<2) return NULL; - - b = argv[1]; - rport = _network_server_port; - c = 0; - ip = b; - - while (b[c] != 0) { - if (((char)b[c]) == '#') { - player = &b[c+1]; - b[c] = 0; - } - if (((char)b[c]) == ':') { - port = &b[c+1]; - b[c] = 0; - } - c++; - } - - IConsolePrintF(_iconsole_color_default,"Connecting to %s...",ip); - if (player!=NULL) { - _network_playas = atoi(player); - IConsolePrintF(_iconsole_color_default," player-no: %s",player); - } - if (port!=NULL) { - rport = atoi(port); - IConsolePrintF(_iconsole_color_default," port: %s",port); - } - - NetworkCoreConnectGame(b, rport); - - return NULL; -} - -#endif - -/* **************************** */ -/* default console commands */ -/* **************************** */ - -DEF_CONSOLE_CMD(ConEcho) -{ - if (argc<2) return NULL; - IConsolePrint(_iconsole_color_default, argv[1]); - return NULL; -} - -DEF_CONSOLE_CMD(ConEchoC) -{ - if (argc<3) return NULL; - IConsolePrint(atoi(argv[1]), argv[2]); - return NULL; -} - -DEF_CONSOLE_CMD(ConPrintF) -{ - if (argc<3) return NULL; - IConsolePrintF(_iconsole_color_default, argv[1] ,argv[2],argv[3],argv[4],argv[5],argv[6],argv[7],argv[8],argv[9],argv[10],argv[11],argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],argv[19]); - return NULL; -} - -DEF_CONSOLE_CMD(ConPrintFC) -{ - if (argc<3) return NULL; - IConsolePrintF(atoi(argv[1]), argv[2] ,argv[3],argv[4],argv[5],argv[6],argv[7],argv[8],argv[9],argv[10],argv[11],argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],argv[19]); - return NULL; -} - -DEF_CONSOLE_CMD(ConScreenShot) -{ - if (argc<2) { - _make_screenshot=1; - } else { - if (strcmp(argv[1],"big")==0) { - _make_screenshot=2; - } - if (strcmp(argv[1],"no_con")==0) { - IConsoleClose(); - _make_screenshot=1; - } - } - return NULL; -} - -DEF_CONSOLE_CMD(ConVarInfo) -{ - if (argc<2) return NULL; - if (argt[1]!=ICONSOLE_VAR_REFERENCE) { - IConsoleError("variable must be an variable reference"); - } else { - _iconsole_var * item; - item = (_iconsole_var *) argv[1]; - IConsolePrintF(_iconsole_color_default,"variable_name: %s",item->name); - IConsolePrintF(_iconsole_color_default,"variable_type: %i",item->type); - IConsolePrintF(_iconsole_color_default,"variable_addr: %i",item->addr); - if (item->_malloc) IConsolePrintF(_iconsole_color_default,"variable_malloc: internal allocated"); else IConsolePrintF(_iconsole_color_default, "variable_malloc: external allocated"); - } - return NULL; -} - -DEF_CONSOLE_CMD(ConDebugLevel) -{ - if (argc<2) return NULL; - SetDebugString(argv[1]); - return NULL; -} - -DEF_CONSOLE_CMD(ConExit) -{ - _exit_game = true; - return NULL; -} - -DEF_CONSOLE_CMD(ConHelp) -{ - IConsolePrint(13 ," -- console help -- "); - IConsolePrint(1 ," variables: [command to list them: list_vars]"); - IConsolePrint(1 ," *temp_string = \"my little \""); - IConsolePrint(1 ,""); - IConsolePrint(1 ," commands: [command to list them: list_cmds]"); - IConsolePrint(1 ," [command] [\"string argument with spaces\"] [argument 2] ..."); - IConsolePrint(1 ," printf \"%s world\" *temp_string"); - IConsolePrint(1 ,""); - IConsolePrint(1 ," command/variable returning a value into an variable:"); - IConsolePrint(1 ," *temp_uint16 << random"); - IConsolePrint(1 ," *temp_uint16 << *temp_uint16_2"); - IConsolePrint(1 ,""); - return NULL; -} - -DEF_CONSOLE_CMD(ConRandom) -{ - _iconsole_var * result; - result = IConsoleVarAlloc(ICONSOLE_VAR_UINT16); - IConsoleVarSetValue(result,rand()); - return result; -} - -DEF_CONSOLE_CMD(ConListCommands) -{ - _iconsole_cmd * item; - int l = 0; - - if (argv[1]!=NULL) l = strlen((char *) argv[1]); - - item = _iconsole_cmds; - while (item != NULL) { - if (argv[1]!=NULL) { - - if (memcmp((void *) item->name, (void *) argv[1],l)==0) - IConsolePrintF(_iconsole_color_default,"%s",item->name); - - } else { - - IConsolePrintF(_iconsole_color_default,"%s",item->name); - - } - item = item->_next; - } - - return NULL; -} - -DEF_CONSOLE_CMD(ConListVariables) -{ - _iconsole_var * item; - int l = 0; - - if (argv[1]!=NULL) l = strlen((char *) argv[1]); - - item = _iconsole_vars; - while (item != NULL) { - if (argv[1]!=NULL) { - - if (memcmp((void *) item->name, (void *) argv[1],l)==0) - IConsolePrintF(_iconsole_color_default,"%s",item->name); - - } else { - - IConsolePrintF(_iconsole_color_default,"%s",item->name); - - } - item = item->_next; - } - - return NULL; -} - -DEF_CONSOLE_CMD(ConListDumpVariables) -{ - _iconsole_var * item; - int l = 0; - - if (argv[1]!=NULL) l = strlen((char *) argv[1]); - - item = _iconsole_vars; - while (item != NULL) { - if (argv[1]!=NULL) { - - if (memcmp((void *) item->name, (void *) argv[1],l)==0) - IConsoleVarDump(item,NULL); - - } else { - - IConsoleVarDump(item,NULL); - - } - item = item->_next; - } - - return NULL; -} - -#ifdef _DEBUG -/* ****************************************** */ -/* debug commands and variables */ -/* ****************************************** */ - -void IConsoleDebugLibRegister() -{ - IConsoleVarMemRegister("temp_bool",ICONSOLE_VAR_BOOLEAN); - IConsoleVarMemRegister("temp_int16",ICONSOLE_VAR_INT16); - IConsoleVarMemRegister("temp_int32",ICONSOLE_VAR_INT32); - IConsoleVarMemRegister("temp_pointer",ICONSOLE_VAR_POINTER); - 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 - -/* ****************************************** */ -/* console command and variable registration */ -/* ****************************************** */ - -void IConsoleStdLibRegister() -{ - // stdlib - extern byte _stdlib_developer; - extern bool _stdlib_con_developer; - -#ifdef _DEBUG - IConsoleDebugLibRegister(); -#endif - - // functions [please add them alphabeticaly] -#ifdef ENABLE_NETWORK - IConsoleCmdRegister("connect",ConNetworkConnect); - IConsoleCmdHook("connect",ICONSOLE_HOOK_ACCESS,ConCmdHookNoNetwork); -#endif - IConsoleCmdRegister("debug_level",ConDebugLevel); - IConsoleCmdRegister("dump_vars",ConListDumpVariables); - IConsoleCmdRegister("echo",ConEcho); - IConsoleCmdRegister("echoc",ConEchoC); - IConsoleCmdRegister("exit",ConExit); - IConsoleCmdRegister("help",ConHelp); - IConsoleCmdRegister("printf",ConPrintF); - IConsoleCmdRegister("printfc",ConPrintFC); - IConsoleCmdRegister("quit",ConExit); - IConsoleCmdRegister("random",ConRandom); - IConsoleCmdRegister("list_cmds",ConListCommands); - IConsoleCmdRegister("list_vars",ConListVariables); - IConsoleCmdRegister("resetengines",ConResetEngines); - IConsoleCmdHook("resetengines",ICONSOLE_HOOK_ACCESS,ConCmdHookNoNetwork); - IConsoleCmdRegister("screenshot",ConScreenShot); - IConsoleCmdRegister("scrollto",ConScrollToTile); - IConsoleCmdRegister("varinfo",ConVarInfo); - - // variables [please add them alphabeticaly] - IConsoleVarRegister("con_developer",(void *) &_stdlib_con_developer,ICONSOLE_VAR_BOOLEAN); - IConsoleVarRegister("developer",(void *) &_stdlib_developer,ICONSOLE_VAR_BYTE); -#ifdef ENABLE_NETWORK - IConsoleVarRegister("net_client_timeout",&_network_client_timeout,ICONSOLE_VAR_UINT16); - IConsoleVarHook("*net_client_timeout",ICONSOLE_HOOK_ACCESS,ConVarHookNoNetClient); - IConsoleVarRegister("net_ready_ahead",&_network_ready_ahead,ICONSOLE_VAR_UINT16); - IConsoleVarRegister("net_sync_freq",&_network_sync_freq,ICONSOLE_VAR_UINT16); - IConsoleVarHook("*net_sync_freq",ICONSOLE_HOOK_ACCESS,ConVarHookNoNetClient); -#endif - - -} -/* -------------------- dont cross this line --------------------- */ +/* -------------------- dont cross this line --------------------- */ +#include "stdafx.h" +#include "ttd.h" +#include "console.h" +#include "engine.h" +#include "functions.h" +#include "variables.h" + +#if defined(WIN32) +# define ENABLE_NETWORK +#endif + +// ** console command / variable defines ** // +#define DEF_CONSOLE_CMD(yyyy) static _iconsole_var * yyyy(byte argc, byte* argv[], byte argt[]) +#define DEF_CONSOLE_CMD_HOOK(yyyy) static bool yyyy(_iconsole_cmd * hookcmd) +#define DEF_CONSOLE_VAR_HOOK(yyyy) static bool yyyy(_iconsole_var * hookvar) + +static int32 GetArgumentInteger(byte *arg) +{ + int32 result; + sscanf((char *)arg, "%u", &result); + + if (result == 0 && arg[0] == '0' && arg[1] == 'x') + sscanf((char *)arg, "%x", &result); + + return result; +} + +/* **************************** */ +/* variable and command hooks */ +/* **************************** */ + +DEF_CONSOLE_CMD_HOOK(ConCmdHookNoNetwork) +{ + if (_networking) { + IConsoleError("this command is forbidden in multiplayer"); + return false; + } + return true; +} + +#if 0 /* Not used atm */ +DEF_CONSOLE_VAR_HOOK(ConVarHookNoNetwork) +{ + if (_networking) { + IConsoleError("this variable is forbidden in multiplayer"); + return false; + } + return true; +} +#endif + +DEF_CONSOLE_VAR_HOOK(ConVarHookNoNetClient) +{ + if (!_networking_server) { + IConsoleError("this variable only makes sense for a network server"); + return false; + } + return true; +} + +/* **************************** */ +/* reset commands */ +/* **************************** */ + +DEF_CONSOLE_CMD(ConResetEngines) +{ + StartupEngines(); + return 0; +} + +DEF_CONSOLE_CMD(ConResetTile) +{ + if (argc == 2) { + TileIndex tile = (TileIndex)GetArgumentInteger(argv[1]); + DoClearSquare(tile); + } + + return 0; +} + +DEF_CONSOLE_CMD(ConScrollToTile) +{ + if (argc == 2) { + TileIndex tile = (TileIndex)GetArgumentInteger(argv[1]); + ScrollMainWindowToTile(tile); + } + + return 0; +} + +// ********************************* // +// * Network Core Console Commands * // +// ********************************* // +#ifdef ENABLE_NETWORK + +DEF_CONSOLE_CMD(ConNetworkConnect) +{ + byte * b; + byte * ip = NULL; + byte * port = NULL; + byte * player = NULL; + byte c; + uint16 rport; + + if (argc<2) return NULL; + + b = argv[1]; + rport = _network_server_port; + c = 0; + ip = b; + + while (b[c] != 0) { + if (((char)b[c]) == '#') { + player = &b[c+1]; + b[c] = 0; + } + if (((char)b[c]) == ':') { + port = &b[c+1]; + b[c] = 0; + } + c++; + } + + IConsolePrintF(_iconsole_color_default,"Connecting to %s...",ip); + if (player!=NULL) { + _network_playas = atoi(player); + IConsolePrintF(_iconsole_color_default," player-no: %s",player); + } + if (port!=NULL) { + rport = atoi(port); + IConsolePrintF(_iconsole_color_default," port: %s",port); + } + + NetworkCoreConnectGame(b, rport); + + return NULL; +} + +#endif + +/* **************************** */ +/* default console commands */ +/* **************************** */ + +DEF_CONSOLE_CMD(ConEcho) +{ + if (argc<2) return NULL; + IConsolePrint(_iconsole_color_default, argv[1]); + return NULL; +} + +DEF_CONSOLE_CMD(ConEchoC) +{ + if (argc<3) return NULL; + IConsolePrint(atoi(argv[1]), argv[2]); + return NULL; +} + +DEF_CONSOLE_CMD(ConPrintF) +{ + if (argc<3) return NULL; + IConsolePrintF(_iconsole_color_default, argv[1] ,argv[2],argv[3],argv[4],argv[5],argv[6],argv[7],argv[8],argv[9],argv[10],argv[11],argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],argv[19]); + return NULL; +} + +DEF_CONSOLE_CMD(ConPrintFC) +{ + if (argc<3) return NULL; + IConsolePrintF(atoi(argv[1]), argv[2] ,argv[3],argv[4],argv[5],argv[6],argv[7],argv[8],argv[9],argv[10],argv[11],argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],argv[19]); + return NULL; +} + +DEF_CONSOLE_CMD(ConScreenShot) +{ + if (argc<2) { + _make_screenshot=1; + } else { + if (strcmp(argv[1],"big")==0) { + _make_screenshot=2; + } + if (strcmp(argv[1],"no_con")==0) { + IConsoleClose(); + _make_screenshot=1; + } + } + return NULL; +} + +DEF_CONSOLE_CMD(ConVarInfo) +{ + if (argc<2) return NULL; + if (argt[1]!=ICONSOLE_VAR_REFERENCE) { + IConsoleError("variable must be an variable reference"); + } else { + _iconsole_var * item; + item = (_iconsole_var *) argv[1]; + IConsolePrintF(_iconsole_color_default,"variable_name: %s",item->name); + IConsolePrintF(_iconsole_color_default,"variable_type: %i",item->type); + IConsolePrintF(_iconsole_color_default,"variable_addr: %i",item->addr); + if (item->_malloc) IConsolePrintF(_iconsole_color_default,"variable_malloc: internal allocated"); else IConsolePrintF(_iconsole_color_default, "variable_malloc: external allocated"); + } + return NULL; +} + +DEF_CONSOLE_CMD(ConDebugLevel) +{ + if (argc<2) return NULL; + SetDebugString(argv[1]); + return NULL; +} + +DEF_CONSOLE_CMD(ConExit) +{ + _exit_game = true; + return NULL; +} + +DEF_CONSOLE_CMD(ConHelp) +{ + IConsolePrint(13 ," -- console help -- "); + IConsolePrint(1 ," variables: [command to list them: list_vars]"); + IConsolePrint(1 ," *temp_string = \"my little \""); + IConsolePrint(1 ,""); + IConsolePrint(1 ," commands: [command to list them: list_cmds]"); + IConsolePrint(1 ," [command] [\"string argument with spaces\"] [argument 2] ..."); + IConsolePrint(1 ," printf \"%s world\" *temp_string"); + IConsolePrint(1 ,""); + IConsolePrint(1 ," command/variable returning a value into an variable:"); + IConsolePrint(1 ," *temp_uint16 << random"); + IConsolePrint(1 ," *temp_uint16 << *temp_uint16_2"); + IConsolePrint(1 ,""); + return NULL; +} + +DEF_CONSOLE_CMD(ConRandom) +{ + _iconsole_var * result; + result = IConsoleVarAlloc(ICONSOLE_VAR_UINT16); + IConsoleVarSetValue(result,rand()); + return result; +} + +DEF_CONSOLE_CMD(ConListCommands) +{ + _iconsole_cmd * item; + int l = 0; + + if (argv[1]!=NULL) l = strlen((char *) argv[1]); + + item = _iconsole_cmds; + while (item != NULL) { + if (argv[1]!=NULL) { + + if (memcmp((void *) item->name, (void *) argv[1],l)==0) + IConsolePrintF(_iconsole_color_default,"%s",item->name); + + } else { + + IConsolePrintF(_iconsole_color_default,"%s",item->name); + + } + item = item->_next; + } + + return NULL; +} + +DEF_CONSOLE_CMD(ConListVariables) +{ + _iconsole_var * item; + int l = 0; + + if (argv[1]!=NULL) l = strlen((char *) argv[1]); + + item = _iconsole_vars; + while (item != NULL) { + if (argv[1]!=NULL) { + + if (memcmp(item->name, argv[1],l)==0) + IConsolePrintF(_iconsole_color_default,"%s",item->name); + + } else { + + IConsolePrintF(_iconsole_color_default,"%s",item->name); + + } + item = item->_next; + } + + return NULL; +} + +DEF_CONSOLE_CMD(ConListDumpVariables) +{ + _iconsole_var * item; + int l = 0; + + if (argv[1]!=NULL) l = strlen((char *) argv[1]); + + item = _iconsole_vars; + while (item != NULL) { + if (argv[1]!=NULL) { + + if (memcmp(item->name, argv[1],l)==0) + IConsoleVarDump(item,NULL); + + } else { + + IConsoleVarDump(item,NULL); + + } + item = item->_next; + } + + return NULL; +} + +#ifdef _DEBUG +/* ****************************************** */ +/* debug commands and variables */ +/* ****************************************** */ + +void IConsoleDebugLibRegister() +{ + IConsoleVarMemRegister("temp_bool",ICONSOLE_VAR_BOOLEAN); + IConsoleVarMemRegister("temp_int16",ICONSOLE_VAR_INT16); + IConsoleVarMemRegister("temp_int32",ICONSOLE_VAR_INT32); + IConsoleVarMemRegister("temp_pointer",ICONSOLE_VAR_POINTER); + 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 + +/* ****************************************** */ +/* console command and variable registration */ +/* ****************************************** */ + +void IConsoleStdLibRegister() +{ + // stdlib + extern byte _stdlib_developer; + extern bool _stdlib_con_developer; + +#ifdef _DEBUG + IConsoleDebugLibRegister(); +#else + (void)ConResetTile; // Silence warning, this is only used in _DEBUG +#endif + + // functions [please add them alphabeticaly] +#ifdef ENABLE_NETWORK + IConsoleCmdRegister("connect",ConNetworkConnect); + IConsoleCmdHook("connect",ICONSOLE_HOOK_ACCESS,ConCmdHookNoNetwork); +#endif + IConsoleCmdRegister("debug_level",ConDebugLevel); + IConsoleCmdRegister("dump_vars",ConListDumpVariables); + IConsoleCmdRegister("echo",ConEcho); + IConsoleCmdRegister("echoc",ConEchoC); + IConsoleCmdRegister("exit",ConExit); + IConsoleCmdRegister("help",ConHelp); + IConsoleCmdRegister("printf",ConPrintF); + IConsoleCmdRegister("printfc",ConPrintFC); + IConsoleCmdRegister("quit",ConExit); + IConsoleCmdRegister("random",ConRandom); + IConsoleCmdRegister("list_cmds",ConListCommands); + IConsoleCmdRegister("list_vars",ConListVariables); + IConsoleCmdRegister("resetengines",ConResetEngines); + IConsoleCmdHook("resetengines",ICONSOLE_HOOK_ACCESS,ConCmdHookNoNetwork); + IConsoleCmdRegister("screenshot",ConScreenShot); + IConsoleCmdRegister("scrollto",ConScrollToTile); + IConsoleCmdRegister("varinfo",ConVarInfo); + + // variables [please add them alphabeticaly] + IConsoleVarRegister("con_developer",(void *) &_stdlib_con_developer,ICONSOLE_VAR_BOOLEAN); + IConsoleVarRegister("developer",(void *) &_stdlib_developer,ICONSOLE_VAR_BYTE); +#ifdef ENABLE_NETWORK + IConsoleVarRegister("net_client_timeout",&_network_client_timeout,ICONSOLE_VAR_UINT16); + IConsoleVarHook("*net_client_timeout",ICONSOLE_HOOK_ACCESS,ConVarHookNoNetClient); + IConsoleVarRegister("net_ready_ahead",&_network_ready_ahead,ICONSOLE_VAR_UINT16); + IConsoleVarRegister("net_sync_freq",&_network_sync_freq,ICONSOLE_VAR_UINT16); + IConsoleVarHook("*net_sync_freq",ICONSOLE_HOOK_ACCESS,ConVarHookNoNetClient); +#endif + + +} +/* -------------------- dont cross this line --------------------- */