From dc3feaf42cd8bcb22b04fdba17dc10caacc94fef Mon Sep 17 00:00:00 2001 From: xalduin Date: Thu, 10 Jun 2010 00:24:38 +0800 Subject: Fixed remaining compiler warnings for gcc on Linux --- src/engine/shared/demorec.cpp | 2 +- src/engine/shared/ringbuffer.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/engine/shared') diff --git a/src/engine/shared/demorec.cpp b/src/engine/shared/demorec.cpp index 48b06e9a..6c2ba07d 100644 --- a/src/engine/shared/demorec.cpp +++ b/src/engine/shared/demorec.cpp @@ -335,7 +335,7 @@ void CDemoPlayer::DoTick() static char aDecompressed[CSnapshot::MAX_SIZE]; static char aData[CSnapshot::MAX_SIZE]; int ChunkType, ChunkTick, ChunkSize; - int DataSize; + int DataSize = 0; int GotSnapshot = 0; // update ticks diff --git a/src/engine/shared/ringbuffer.cpp b/src/engine/shared/ringbuffer.cpp index 45a845ee..b84db5a3 100644 --- a/src/engine/shared/ringbuffer.cpp +++ b/src/engine/shared/ringbuffer.cpp @@ -98,7 +98,7 @@ void *CRingBufferBase::Allocate(int Size) // okey, we have our block // split the block if needed - if(pBlock->m_Size > WantedSize+sizeof(CItem)) + if(pBlock->m_Size > WantedSize+(int)sizeof(CItem)) { CItem *pNewItem = (CItem *)((char *)pBlock + WantedSize); pNewItem->m_pPrev = pBlock; -- cgit 1.4.1 From ea64b0d7b361308d3b3737ecbac724856bfddda4 Mon Sep 17 00:00:00 2001 From: oy Date: Fri, 18 Jun 2010 20:32:52 +0200 Subject: made the console use the flagmask when looking for command (FindCommand) and removed double "No such command" console message --- src/engine/client/client.cpp | 2 +- src/engine/console.h | 4 ++-- src/engine/server/server.cpp | 2 +- src/engine/shared/console.cpp | 25 ++++++++++++++----------- src/engine/shared/console.h | 7 ++++--- src/game/client/components/console.cpp | 2 +- 6 files changed, 23 insertions(+), 19 deletions(-) (limited to 'src/engine/shared') 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); } } } -- cgit 1.4.1 From a5113c6740e22e633a7fd7d853b81518762e4e21 Mon Sep 17 00:00:00 2001 From: oy Date: Sun, 20 Jun 2010 14:12:59 +0200 Subject: added commands to dump the output of the consoles into a file --- src/engine/shared/storage.cpp | 3 +++ src/game/client/components/console.cpp | 49 ++++++++++++++++++++++++++++++++++ src/game/client/components/console.h | 3 +++ 3 files changed, 55 insertions(+) (limited to 'src/engine/shared') diff --git a/src/engine/shared/storage.cpp b/src/engine/shared/storage.cpp index 491795ad..1d0e2f78 100644 --- a/src/engine/shared/storage.cpp +++ b/src/engine/shared/storage.cpp @@ -30,6 +30,9 @@ public: str_format(aPath, sizeof(aPath), "%s/maps", m_aApplicationSavePath); fs_makedir(aPath); + str_format(aPath, sizeof(aPath), "%s/dumps", m_aApplicationSavePath); + fs_makedir(aPath); + str_format(aPath, sizeof(aPath), "%s/downloadedmaps", m_aApplicationSavePath); fs_makedir(aPath); diff --git a/src/game/client/components/console.cpp b/src/game/client/components/console.cpp index 5ffe1efd..433ff409 100644 --- a/src/game/client/components/console.cpp +++ b/src/game/client/components/console.cpp @@ -1,5 +1,6 @@ //#include "gc_console.h" #include +#include #include @@ -9,6 +10,7 @@ #include #include #include +#include #include #include @@ -570,6 +572,41 @@ void CGameConsole::Toggle(int Type) m_ConsoleType = Type; } +void CGameConsole::Dump(int Type) +{ + CInstance *pConsole = Type == 1 ? &m_RemoteConsole : &m_LocalConsole; + char aFilename[128]; + time_t Time; + char aDate[20]; + + time(&Time); + tm* TimeInfo = localtime(&Time); + strftime(aDate, sizeof(aDate), "%Y-%m-%d_%I-%M", TimeInfo); + + for(int i = 0; i < 10; i++) + { + IOHANDLE io; + str_format(aFilename, sizeof(aFilename), "dumps/%s_dump%s-%05d.txt", Type==1?"remote_console":"local_console", aDate, i); + io = Storage()->OpenFile(aFilename, IOFLAG_WRITE); + if(io) + { + #if defined(CONF_FAMILY_WINDOWS) + static const char Newline[] = "\r\n"; + #else + static const char Newline[] = "\n"; + #endif + + for(char *pEntry = pConsole->m_Backlog.First(); pEntry; pEntry = pConsole->m_Backlog.Next(pEntry)) + { + io_write(io, pEntry, str_length(pEntry)); + io_write(io, Newline, sizeof(Newline)-1); + } + io_close(io); + break; + } + } +} + void CGameConsole::ConToggleLocalConsole(IConsole::IResult *pResult, void *pUserData) { ((CGameConsole *)pUserData)->Toggle(0); @@ -590,6 +627,16 @@ void CGameConsole::ConClearRemoteConsole(IConsole::IResult *pResult, void *pUser ((CGameConsole *)pUserData)->m_RemoteConsole.ClearBacklog(); } +void CGameConsole::ConDumpLocalConsole(IConsole::IResult *pResult, void *pUserData) +{ + ((CGameConsole *)pUserData)->Dump(0); +} + +void CGameConsole::ConDumpRemoteConsole(IConsole::IResult *pResult, void *pUserData) +{ + ((CGameConsole *)pUserData)->Dump(1); +} + void CGameConsole::ClientConsolePrintCallback(const char *pStr, void *pUserData) { ((CGameConsole *)pUserData)->m_LocalConsole.PrintLine(pStr); @@ -618,6 +665,8 @@ void CGameConsole::OnConsoleInit() Console()->Register("toggle_remote_console", "", CFGFLAG_CLIENT, ConToggleRemoteConsole, this, "Toggle remote console"); Console()->Register("clear_local_console", "", CFGFLAG_CLIENT, ConClearLocalConsole, this, "Clear local console"); Console()->Register("clear_remote_console", "", CFGFLAG_CLIENT, ConClearRemoteConsole, this, "Clear remote console"); + Console()->Register("dump_local_console", "", CFGFLAG_CLIENT, ConDumpLocalConsole, this, "Dump local console"); + Console()->Register("dump_remote_console", "", CFGFLAG_CLIENT, ConDumpRemoteConsole, this, "Dump remote console"); } /* diff --git a/src/game/client/components/console.h b/src/game/client/components/console.h index 68f3965d..a4d22790 100644 --- a/src/game/client/components/console.h +++ b/src/game/client/components/console.h @@ -56,6 +56,7 @@ class CGameConsole : public CComponent float m_StateChangeDuration; void Toggle(int Type); + void Dump(int Type); static void PossibleCommandsRenderCallback(const char *pStr, void *pUser); static void ClientConsolePrintCallback(const char *pStr, void *pUserData); @@ -63,6 +64,8 @@ class CGameConsole : public CComponent static void ConToggleRemoteConsole(IConsole::IResult *pResult, void *pUserData); static void ConClearLocalConsole(IConsole::IResult *pResult, void *pUserData); static void ConClearRemoteConsole(IConsole::IResult *pResult, void *pUserData); + static void ConDumpLocalConsole(IConsole::IResult *pResult, void *pUserData); + static void ConDumpRemoteConsole(IConsole::IResult *pResult, void *pUserData); public: CGameConsole(); -- cgit 1.4.1