diff options
Diffstat (limited to 'src/engine/shared')
| -rw-r--r-- | src/engine/shared/console.cpp | 51 | ||||
| -rw-r--r-- | src/engine/shared/console.h | 1 |
2 files changed, 51 insertions, 1 deletions
diff --git a/src/engine/shared/console.cpp b/src/engine/shared/console.cpp index ff9b0cd8..87554678 100644 --- a/src/engine/shared/console.cpp +++ b/src/engine/shared/console.cpp @@ -160,7 +160,7 @@ void CConsole::RegisterPrintCallback(FPrintCallback pfnPrintCallback, void *pUse void CConsole::Print(int Level, const char *pFrom, const char *pStr) { dbg_msg(pFrom ,"%s", pStr); - if (Level <= g_Config.m_ConsoleOutputLevel && m_pfnPrintCallback) + if(Level <= g_Config.m_ConsoleOutputLevel && m_pfnPrintCallback) { char aBuf[1024]; str_format(aBuf, sizeof(aBuf), "[%s]: %s", pFrom, pStr); @@ -168,6 +168,55 @@ void CConsole::Print(int Level, const char *pFrom, const char *pStr) } } +bool CConsole::LineIsValid(const char *pStr) +{ + if(!pStr || *pStr == 0) + return false; + + do + { + CResult Result; + const char *pEnd = pStr; + const char *pNextPart = 0; + int InString = 0; + + while(*pEnd) + { + if(*pEnd == '"') + InString ^= 1; + else if(*pEnd == '\\') // escape sequences + { + if(pEnd[1] == '"') + pEnd++; + } + else if(!InString) + { + if(*pEnd == ';') // command separator + { + pNextPart = pEnd+1; + break; + } + else if(*pEnd == '#') // comment, no need to do anything more + break; + } + + pEnd++; + } + + if(ParseStart(&Result, pStr, (pEnd-pStr) + 1) != 0) + return false; + + CCommand *pCommand = FindCommand(Result.m_pCommand, m_FlagMask); + if(!pCommand || ParseArgs(&Result, pCommand->m_pParams)) + return false; + + pStr = pNextPart; + } + while(pStr && *pStr); + + return true; +} + void CConsole::ExecuteLineStroked(int Stroke, const char *pStr) { while(pStr && *pStr) diff --git a/src/engine/shared/console.h b/src/engine/shared/console.h index 87df6dea..e0435c34 100644 --- a/src/engine/shared/console.h +++ b/src/engine/shared/console.h @@ -119,6 +119,7 @@ public: virtual void Chain(const char *pName, FChainCommandCallback pfnChainFunc, void *pUser); virtual void StoreCommands(bool Store); + virtual bool LineIsValid(const char *pStr); virtual void ExecuteLine(const char *pStr); virtual void ExecuteFile(const char *pFilename); |