Files @ r221:56c7ed3a0581
Branch filter:

Location: cpp/openttd-patchpack/source/console_cmds.c

signde
(svn r222) -Fix: Added network.h and console_cmd.c to MSVC6 Project
-Fix: Added console_cmd.c to the Makefile
/* -------------------- 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 --------------------- */