about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2010-06-18 20:32:52 +0200
committeroy <Tom_Adams@web.de>2010-06-18 20:32:52 +0200
commitea64b0d7b361308d3b3737ecbac724856bfddda4 (patch)
treedab4a10f455ef2916969fe2d8e17fa690fa543e8 /src
parenta5bc567e84902d55fe1f2eec9df621d984a0d808 (diff)
downloadzcatch-ea64b0d7b361308d3b3737ecbac724856bfddda4.tar.gz
zcatch-ea64b0d7b361308d3b3737ecbac724856bfddda4.zip
made the console use the flagmask when looking for command (FindCommand) and removed double "No such command" console message
Diffstat (limited to 'src')
-rw-r--r--src/engine/client/client.cpp2
-rw-r--r--src/engine/console.h4
-rw-r--r--src/engine/server/server.cpp2
-rw-r--r--src/engine/shared/console.cpp25
-rw-r--r--src/engine/shared/console.h7
-rw-r--r--src/game/client/components/console.cpp2
6 files changed, 23 insertions, 19 deletions
diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp
index 881f06d8..eae5ef3a 100644
--- a/src/engine/client/client.cpp
+++ b/src/engine/client/client.cpp
@@ -1964,7 +1964,7 @@ int main(int argc, const char **argv) // ignore_convention
 	m_Client.RegisterInterfaces();
 
 	// create the components
-	IConsole *pConsole = CreateConsole();
+	IConsole *pConsole = CreateConsole(CFGFLAG_CLIENT);
 	IStorage *pStorage = CreateStorage("Teeworlds", argv[0]); // ignore_convention
 	IConfig *pConfig = CreateConfig();
 	IEngineGraphics *pEngineGraphics = CreateEngineGraphics();
diff --git a/src/engine/console.h b/src/engine/console.h
index 74d789e9..34fa4272 100644
--- a/src/engine/console.h
+++ b/src/engine/console.h
@@ -37,7 +37,7 @@ public:
 	typedef void (*FCommandCallback)(IResult *pResult, void *pUserData);
 	typedef void (*FChainCommandCallback)(IResult *pResult, void *pUserData, FCommandCallback pfnCallback, void *pCallbackUserData);
 
-	virtual CCommandInfo *GetCommandInfo(const char *pName) = 0;
+	virtual CCommandInfo *GetCommandInfo(const char *pName, int FlagMask) = 0;
 	virtual void PossibleCommands(const char *pStr, int FlagMask, FPossibleCallback pfnCallback, void *pUser) = 0;
 	virtual void ParseArguments(int NumArgs, const char **ppArguments) = 0;
 
@@ -53,6 +53,6 @@ public:
 	virtual void Print(const char *pStr) = 0;
 };
 
-extern IConsole *CreateConsole();
+extern IConsole *CreateConsole(int FlagMask);
 
 #endif // FILE_ENGINE_CONSOLE_H
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index 7a26704c..ea2815e7 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -1391,7 +1391,7 @@ int main(int argc, const char **argv) // ignore_convention
 	// create the components
 	IEngineMap *pEngineMap = CreateEngineMap();
 	IGameServer *pGameServer = CreateGameServer();
-	IConsole *pConsole = CreateConsole();
+	IConsole *pConsole = CreateConsole(CFGFLAG_SERVER);
 	IEngineMasterServer *pEngineMasterServer = CreateEngineMasterServer();
 	IStorage *pStorage = CreateStorage("Teeworlds", argv[0]); // ignore_convention
 	IConfig *pConfig = CreateConfig();
diff --git a/src/engine/shared/console.cpp b/src/engine/shared/console.cpp
index eacf9b78..b7850bea 100644
--- a/src/engine/shared/console.cpp
+++ b/src/engine/shared/console.cpp
@@ -210,7 +210,7 @@ void CConsole::ExecuteLineStroked(int Stroke, const char *pStr)
 		if(ParseStart(&Result, pStr, (pEnd-pStr) + 1) != 0)
 			return;
 
-		CCommand *pCommand = FindCommand(Result.m_pCommand);
+		CCommand *pCommand = FindCommand(Result.m_pCommand, m_FlagMask);
 
 		if(pCommand)
 		{
@@ -234,7 +234,7 @@ void CConsole::ExecuteLineStroked(int Stroke, const char *pStr)
 					pCommand->m_pfnCallback(&Result, pCommand->m_pUserData);
 			}
 		}
-		else
+		else if(Stroke)
 		{
 			char aBuf[256];
 			str_format(aBuf, sizeof(aBuf), "No such command: %s.", Result.m_pCommand);
@@ -258,14 +258,16 @@ void CConsole::PossibleCommands(const char *pStr, int FlagMask, FPossibleCallbac
 	}	
 }
 
-// TODO: this should regard the commands flag
-CConsole::CCommand *CConsole::FindCommand(const char *pName)
+CConsole::CCommand *CConsole::FindCommand(const char *pName, int FlagMask)
 {
 	CCommand *pCommand;
 	for (pCommand = m_pFirstCommand; pCommand; pCommand = pCommand->m_pNext)
 	{
-		if(str_comp_nocase(pCommand->m_pName, pName) == 0)
-			return pCommand;
+		if(pCommand->m_Flags&FlagMask)
+		{
+			if(str_comp_nocase(pCommand->m_pName, pName) == 0)
+				return pCommand;
+		}
 	}	
 	
 	return 0x0;
@@ -385,8 +387,9 @@ static void StrVariableCommand(IConsole::IResult *pResult, void *pUserData)
 	}
 }
 
-CConsole::CConsole()
+CConsole::CConsole(int FlagMask)
 {
+	m_FlagMask = FlagMask;
 	m_pFirstCommand = 0;
 	m_pFirstExec = 0;
 	m_pPrintCallbackUserdata = 0;
@@ -459,7 +462,7 @@ void CConsole::Con_Chain(IResult *pResult, void *pUserData)
 
 void CConsole::Chain(const char *pName, FChainCommandCallback pfnChainFunc, void *pUser)
 {
-	CCommand *pCommand = FindCommand(pName);
+	CCommand *pCommand = FindCommand(pName, m_FlagMask);
 	
 	if(!pCommand)
 	{
@@ -481,10 +484,10 @@ void CConsole::Chain(const char *pName, FChainCommandCallback pfnChainFunc, void
 }
 
 
-IConsole::CCommandInfo *CConsole::GetCommandInfo(const char *pName)
+IConsole::CCommandInfo *CConsole::GetCommandInfo(const char *pName, int FlagMask)
 {
-	return FindCommand(pName);
+	return FindCommand(pName, FlagMask);
 }
 
 
-extern IConsole *CreateConsole() { return new CConsole(); }
+extern IConsole *CreateConsole(int FlagMask) { return new CConsole(FlagMask); }
diff --git a/src/engine/shared/console.h b/src/engine/shared/console.h
index 93d23547..9064fa86 100644
--- a/src/engine/shared/console.h
+++ b/src/engine/shared/console.h
@@ -24,6 +24,7 @@ class CConsole : public IConsole
 		void *m_pUserData;
 	};	
 	
+	int m_FlagMask;
 	CCommand *m_pFirstCommand;
 
 	class CExecFile
@@ -74,12 +75,12 @@ class CConsole : public IConsole
 	int ParseStart(CResult *pResult, const char *pString, int Length);
 	int ParseArgs(CResult *pResult, const char *pFormat);
 
-	CCommand *FindCommand(const char *pName);
+	CCommand *FindCommand(const char *pName, int FlagMask);
 
 public:
-	CConsole();
+	CConsole(int FlagMask);
 
-	virtual CCommandInfo *GetCommandInfo(const char *pName);
+	virtual CCommandInfo *GetCommandInfo(const char *pName, int FlagMask);
 	virtual void PossibleCommands(const char *pStr, int FlagMask, FPossibleCallback pfnCallback, void *pUser) ;
 
 	virtual void ParseArguments(int NumArgs, const char **ppArguments);
diff --git a/src/game/client/components/console.cpp b/src/game/client/components/console.cpp
index b323ab48..9e09e6a2 100644
--- a/src/game/client/components/console.cpp
+++ b/src/game/client/components/console.cpp
@@ -184,7 +184,7 @@ void CGameConsole::CInstance::OnInput(IInput::CEvent Event)
 				aBuf[i] = *pSrc;
 			aBuf[i] = 0;
 			
-			m_pCommand = m_pGameConsole->m_pConsole->GetCommandInfo(aBuf);
+			m_pCommand = m_pGameConsole->m_pConsole->GetCommandInfo(aBuf, m_CompletionFlagmask);
 		}
 	}
 }