diff -r c7b4237fff50 -r 03a67e41afbc core/sm_srvcmds.cpp
--- a/core/sm_srvcmds.cpp Fri Mar 28 06:21:34 2008 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,352 +0,0 @@
-/**
- * vim: set ts=4 :
- * =============================================================================
- * SourceMod
- * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
- * =============================================================================
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, version 3.0, as published by the
- * Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see .
- *
- * As a special exception, AlliedModders LLC gives you permission to link the
- * code of this program (as well as its derivative works) to "Half-Life 2," the
- * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
- * by the Valve Corporation. You must obey the GNU General Public License in
- * all respects for all other code used. Additionally, AlliedModders LLC grants
- * this exception to all derivative works. AlliedModders LLC defines further
- * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
- * or .
- *
- * Version: $Id$
- */
-
-#include "sm_srvcmds.h"
-#include "sm_version.h"
-#include "sm_stringutil.h"
-#include "HandleSys.h"
-#include "CoreConfig.h"
-
-RootConsoleMenu g_RootMenu;
-
-ConVar sourcemod_version("sourcemod_version", SVN_FULL_VERSION, FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY, "SourceMod Version");
-
-RootConsoleMenu::RootConsoleMenu()
-{
- m_pCommands = sm_trie_create();
- m_CfgExecDone = false;
-}
-
-RootConsoleMenu::~RootConsoleMenu()
-{
- sm_trie_destroy(m_pCommands);
-
- List::iterator iter;
- for (iter=m_Menu.begin(); iter!=m_Menu.end(); iter++)
- {
- delete (*iter);
- }
- m_Menu.clear();
-}
-
-#if defined ORANGEBOX_BUILD
- extern void _IntExt_OnHostnameChanged(IConVar *var, const char *pOldValue, float flOldValue);
-#else
- extern void _IntExt_OnHostnameChanged(ConVar *pConVar, char const *oldValue);
-#endif
-
-void RootConsoleMenu::OnSourceModStartup(bool late)
-{
-#if defined ORANGEBOX_BUILD
- g_pCVar = icvar;
-#endif
- CONVAR_REGISTER(this);
- AddRootConsoleCommand("version", "Display version information", this);
- AddRootConsoleCommand("credits", "Display credits listing", this);
-
- ConVar *pHost = icvar->FindVar("hostname");
- pHost->InstallChangeCallback(_IntExt_OnHostnameChanged);
-}
-
-void RootConsoleMenu::OnSourceModShutdown()
-{
- RemoveRootConsoleCommand("credits", this);
- RemoveRootConsoleCommand("version", this);
-}
-
-bool RootConsoleMenu::RegisterConCommandBase(ConCommandBase *pCommand)
-{
- META_REGCVAR(pCommand);
-
- /* Override values of convars created by SourceMod convar manager if specified on command line */
- const char *cmdLineValue = icvar->GetCommandLineValue(pCommand->GetName());
- if (cmdLineValue && !pCommand->IsCommand())
- {
- static_cast(pCommand)->SetValue(cmdLineValue);
- }
-
- return true;
-}
-
-void RootConsoleMenu::ConsolePrint(const char *fmt, ...)
-{
- char buffer[512];
-
- va_list ap;
- va_start(ap, fmt);
- size_t len = vsnprintf(buffer, sizeof(buffer), fmt, ap);
- va_end(ap);
-
- if (len >= sizeof(buffer) - 1)
- {
- buffer[510] = '\n';
- buffer[511] = '\0';
- } else {
- buffer[len++] = '\n';
- buffer[len] = '\0';
- }
-
- META_CONPRINT(buffer);
-}
-
-bool RootConsoleMenu::AddRootConsoleCommand(const char *cmd, const char *text, IRootConsoleCommand *pHandler)
-{
- if (sm_trie_retrieve(m_pCommands, cmd, NULL))
- {
- return false;
- }
-
- sm_trie_insert(m_pCommands, cmd, pHandler);
-
- /* Sort this into the menu */
- List::iterator iter = m_Menu.begin();
- ConsoleEntry *pEntry;
- bool inserted = false;
- while (iter != m_Menu.end())
- {
- pEntry = (*iter);
- if (strcmp(cmd, pEntry->command.c_str()) < 0)
- {
- ConsoleEntry *pNew = new ConsoleEntry;
- pNew->command.assign(cmd);
- pNew->description.assign(text);
- m_Menu.insert(iter, pNew);
- inserted = true;
- break;
- }
- iter++;
- }
-
- if (!inserted)
- {
- ConsoleEntry *pNew = new ConsoleEntry;
- pNew->command.assign(cmd);
- pNew->description.assign(text);
- m_Menu.push_back(pNew);
- }
-
- return true;
-}
-
-bool RootConsoleMenu::RemoveRootConsoleCommand(const char *cmd, IRootConsoleCommand *pHandler)
-{
- /* Sanity tests */
- IRootConsoleCommand *object;
- if (sm_trie_retrieve(m_pCommands, cmd, (void **)&object))
- {
- if (object != pHandler)
- {
- return false;
- }
- } else {
- return false;
- }
-
- sm_trie_delete(m_pCommands, cmd);
-
- List::iterator iter;
- ConsoleEntry *pEntry;
- for (iter=m_Menu.begin(); iter!=m_Menu.end(); iter++)
- {
- pEntry = (*iter);
- if (pEntry->command.compare(cmd) == 0)
- {
- delete pEntry;
- m_Menu.erase(iter);
- break;
- }
- }
-
- return true;
-}
-
-void RootConsoleMenu::DrawGenericOption(const char *cmd, const char *text)
-{
- char buffer[255];
- size_t len, cmdlen = strlen(cmd);
-
- len = UTIL_Format(buffer, sizeof(buffer), " %s", cmd);
- if (cmdlen < 16)
- {
- size_t num = 16 - cmdlen;
- for (size_t i = 0; i < num; i++)
- {
- buffer[len++] = ' ';
- }
- len += snprintf(&buffer[len], sizeof(buffer) - len, " - %s", text);
- ConsolePrint("%s", buffer);
- }
-}
-
-extern void _IntExt_EnableYams();
-
-void RootConsoleMenu::GotRootCmd(const CCommand &cmd)
-{
- unsigned int argnum = cmd.ArgC();
-
- if (argnum >= 2)
- {
- const char *cmdname = cmd.Arg(1);
- if (strcmp(cmdname, "text") == 0)
- {
- _IntExt_EnableYams();
- return;
- }
- else if (strcmp(cmdname, "internal") == 0)
- {
- if (argnum >= 3)
- {
- const char *arg = cmd.Arg(2);
- if (strcmp(arg, "1") == 0)
- {
- SM_ConfigsExecuted_Global();
- }
- else if (strcmp(arg, "2") == 0)
- {
- if (argnum >= 4)
- {
- SM_ConfigsExecuted_Plugin(atoi(cmd.Arg(3)));
- }
- }
- }
- return;
- }
-
- IRootConsoleCommand *pHandler;
- if (sm_trie_retrieve(m_pCommands, cmdname, (void **)&pHandler))
- {
- pHandler->OnRootConsoleCommand(cmdname, cmd);
- return;
- }
- }
-
- ConsolePrint("SourceMod Menu:");
- ConsolePrint("Usage: sm [arguments]");
-
- List::iterator iter;
- ConsoleEntry *pEntry;
- for (iter=m_Menu.begin(); iter!=m_Menu.end(); iter++)
- {
- pEntry = (*iter);
- DrawGenericOption(pEntry->command.c_str(), pEntry->description.c_str());
- }
-}
-
-void RootConsoleMenu::OnRootConsoleCommand(const char *cmdname, const CCommand &command)
-{
- if (strcmp(cmdname, "credits") == 0)
- {
- ConsolePrint(" SourceMod was developed by AlliedModders, LLC.");
- ConsolePrint(" Development would not have been possible without the following people:");
- ConsolePrint(" David \"BAILOPAN\" Anderson, lead developer");
- ConsolePrint(" Borja \"faluco\" Ferrer, Core developer");
- ConsolePrint(" Scott \"Damaged Soul\" Ehlert, Core developer");
- ConsolePrint(" Pavol \"PM OnoTo\" Marko, SourceHook developer");
- ConsolePrint(" Special thanks to Viper of GameConnect");
- ConsolePrint(" Special thanks to Mani of Mani-Admin-Plugin");
- ConsolePrint(" http://www.sourcemod.net/");
- } else if (strcmp(cmdname, "version") == 0) {
- ConsolePrint(" SourceMod Version Information:");
- ConsolePrint(" SourceMod Version: %s", SVN_FULL_VERSION);
- ConsolePrint(" JIT Version: %s, %s", g_pVM->GetVMName(), g_pVM->GetVersionString());
- ConsolePrint(" JIT Settings: %s", g_pVM->GetCPUOptimizations());
- ConsolePrint(" http://www.sourcemod.net/");
- }
-}
-
-CON_COMMAND(sm, "SourceMod Menu")
-{
-#if !defined ORANGEBOX_BUILD
- CCommand args;
-#endif
- g_RootMenu.GotRootCmd(args);
-}
-
-FILE *g_pHndlLog = NULL;
-
-void write_handles_to_log(const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- vfprintf(g_pHndlLog, fmt, ap);
- fprintf(g_pHndlLog, "\n");
- va_end(ap);
-}
-
-void write_handles_to_game(const char *fmt, ...)
-{
- size_t len;
- va_list ap;
- char buffer[1024];
-
- va_start(ap, fmt);
- len = UTIL_FormatArgs(buffer, sizeof(buffer)-2, fmt, ap);
- va_end(ap);
-
- buffer[len] = '\n';
- buffer[len+1] = '\0';
-
- engine->LogPrint(buffer);
-}
-
-CON_COMMAND(sm_dump_handles, "Dumps Handle usage to a file for finding Handle leaks")
-{
-#if !defined ORANGEBOX_BUILD
- CCommand args;
-#endif
- if (args.ArgC() < 2)
- {
- g_RootMenu.ConsolePrint("Usage: sm_dump_handles or for game logs");
- return;
- }
-
- if (strcmp(args.Arg(1), "log") != 0)
- {
- const char *arg = args.Arg(1);
- FILE *fp = fopen(arg, "wt");
- if (!fp)
- {
- g_RootMenu.ConsolePrint("Could not find file \"%s\"", arg);
- return;
- }
-
- g_pHndlLog = fp;
- g_HandleSys.Dump(write_handles_to_log);
- g_pHndlLog = NULL;
-
- fclose(fp);
- }
- else
- {
- g_HandleSys.Dump(write_handles_to_game);
- }
-}