[Orxonox-commit 1303] r6021 - in code/trunk/src: libraries/core libraries/core/input orxonox orxonox/gamestates
rgrieder at orxonox.net
rgrieder at orxonox.net
Wed Nov 4 12:29:00 CET 2009
Author: rgrieder
Date: 2009-11-04 12:28:59 +0100 (Wed, 04 Nov 2009)
New Revision: 6021
Added:
code/trunk/src/libraries/core/CommandLineParser.cc
code/trunk/src/libraries/core/CommandLineParser.h
Removed:
code/trunk/src/libraries/core/CommandLine.cc
code/trunk/src/libraries/core/CommandLine.h
Modified:
code/trunk/src/libraries/core/CMakeLists.txt
code/trunk/src/libraries/core/Core.cc
code/trunk/src/libraries/core/CorePrereqs.h
code/trunk/src/libraries/core/Game.cc
code/trunk/src/libraries/core/PathConfig.cc
code/trunk/src/libraries/core/input/InputManager.cc
code/trunk/src/orxonox/LevelManager.cc
code/trunk/src/orxonox/Main.cc
code/trunk/src/orxonox/gamestates/GSClient.cc
code/trunk/src/orxonox/gamestates/GSDedicated.cc
code/trunk/src/orxonox/gamestates/GSDedicatedClient.cc
code/trunk/src/orxonox/gamestates/GSServer.cc
Log:
Renamed CommandLine to CommandLineParse to avoid confusions with the class name.
Modified: code/trunk/src/libraries/core/CMakeLists.txt
===================================================================
--- code/trunk/src/libraries/core/CMakeLists.txt 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/libraries/core/CMakeLists.txt 2009-11-04 11:28:59 UTC (rev 6021)
@@ -39,7 +39,7 @@
# command
CommandEvaluation.cc
CommandExecutor.cc
- CommandLine.cc
+ CommandLineParser.cc
ConsoleCommand.cc
ConsoleCommandCompilation.cc
Executor.cc
Deleted: code/trunk/src/libraries/core/CommandLine.cc
===================================================================
--- code/trunk/src/libraries/core/CommandLine.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/libraries/core/CommandLine.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -1,377 +0,0 @@
-/*
- * ORXONOX - the hottest 3D action shooter ever to exist
- * > www.orxonox.net <
- *
- *
- * License notice:
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * Author:
- * Reto Grieder
- * Co-authors:
- * ...
- *
- */
-
-#include "CommandLine.h"
-
-#include <algorithm>
-#include <sstream>
-
-#include "util/Convert.h"
-#include "util/Debug.h"
-#include "util/Exception.h"
-#include "util/StringUtils.h"
-#include "util/SubString.h"
-#include "PathConfig.h"
-
-namespace orxonox
-{
- SetCommandLineOnlyArgument(optionsFile, "start.ini").shortcut("o");
-
- /**
- @brief
- Parses a value string for a command line argument.
- It simply uses convertValue(Output, Input) to do that.
- Bools are treated specially. That is necessary
- so that you can have simple command line switches.
- */
- void CommandLineArgument::parse(const std::string& value, bool bParsingFile)
- {
- if (bParsingFile && this->bCommandLineOnly_)
- ThrowException(Argument, "Command line argument '" + getName() + "' is not allowed in files.");
- if (value_.getType() == MT_Type::Bool)
- {
- // simulate command line switch
- bool temp;
- if (convertValue(&temp, value))
- {
- this->bHasDefaultValue_ = false;
- this->value_ = temp;
- }
- else if (value == "")
- {
- this->bHasDefaultValue_ = false;
- this->value_ = true;
- }
- else
- ThrowException(Argument, "Could not read command line argument '" + getName() + "'.");
- }
- else
- {
- if (!value_.setValue(value))
- {
- value_.setValue(defaultValue_);
- ThrowException(Argument, "Could not read command line argument '" + getName() + "'.");
- }
- else
- this->bHasDefaultValue_ = false;
- }
- }
-
-
- /**
- @brief
- Destructor destroys all CommandLineArguments with it.
- */
- CommandLine::~CommandLine()
- {
- CommandLine::destroyAllArguments();
- }
-
- /**
- @brief
- Returns a unique instance (Meyers Singleton).
- */
- CommandLine& CommandLine::_getInstance()
- {
- static CommandLine instance;
- return instance;
- }
-
- /**
- @brief
- Destroys all command line arguments. This should be called at the end
- of main. Do not use before that.
- */
- void CommandLine::destroyAllArguments()
- {
- for (std::map<std::string, CommandLineArgument*>::const_iterator it = _getInstance().cmdLineArgs_.begin();
- it != _getInstance().cmdLineArgs_.end(); ++it)
- delete it->second;
- _getInstance().cmdLineArgs_.clear();
- }
-
- /**
- @brief
- Reads the command line parses the values of each argument.
- It is then stored in the corresponding CommandLineArgument.
- @note
- The reason that you have to provide the string to be parsed as
- space separted list is because of argc and argv. If you only have
- a whole string, simply use getAllStrings() of SubString.
- @param arguments
- Vector of space separated strings.
- */
- void CommandLine::_parse(const std::vector<std::string>& arguments, bool bParsingFile)
- {
- try
- {
- // why this? See bFirstTimeParse_ declaration.
- if (bFirstTimeParse_)
- {
- // first shove all the shortcuts in a map
- for (std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgs_.begin();
- it != cmdLineArgs_.end(); ++it)
- {
- OrxAssert(cmdLineArgsShortcut_.find(it->second->getShortcut()) == cmdLineArgsShortcut_.end(),
- "Cannot have two command line shortcut with the same name.");
- if (it->second->getShortcut() != "")
- cmdLineArgsShortcut_[it->second->getShortcut()] = it->second;
- }
- bFirstTimeParse_ = false;
- }
-
- std::string name;
- std::string shortcut;
- std::string value;
- for (unsigned int i = 0; i < arguments.size(); ++i)
- {
- if (arguments[i].size() != 0)
- {
- // sure not ""
- if (arguments[i][0] == '-')
- {
- // start with "-"
- if (arguments[i].size() == 1)
- {
- // argument[i] is "-", probably a minus sign
- value += "- ";
- }
- else if (arguments[i][1] <= 57 && arguments[i][1] >= 48)
- {
- // negative number as a value
- value += arguments[i] + " ";
- }
- else
- {
- // can be shortcut or full name argument
-
- // save old data first
- value = removeTrailingWhitespaces(value);
- if (name != "")
- {
- checkFullArgument(name, value, bParsingFile);
- name = "";
- assert(shortcut == "");
- }
- else if (shortcut != "")
- {
- checkShortcut(shortcut, value, bParsingFile);
- shortcut = "";
- assert(name == "");
- }
-
- if (arguments[i][1] == '-')
- {
- // full name argument with "--name"
- name = arguments[i].substr(2);
- }
- else
- {
- // shortcut with "-s"
- shortcut = arguments[i].substr(1);
- }
-
- // reset value string
- value = "";
- }
- }
- else
- {
- // value string
-
- if (name == "" && shortcut == "")
- {
- ThrowException(Argument, "Expected \"-\" or \"-\" in command line arguments.\n");
- }
-
- // Concatenate strings as long as there's no new argument by "-" or "--"
- value += arguments[i] + ' ';
- }
- }
- }
-
- // parse last argument
- value = removeTrailingWhitespaces(value);
- if (name != "")
- {
- checkFullArgument(name, value, bParsingFile);
- assert(shortcut == "");
- }
- else if (shortcut != "")
- {
- checkShortcut(shortcut, value, bParsingFile);
- assert(name == "");
- }
- }
- catch (const ArgumentException& ex)
- {
- COUT(0) << "Could not parse command line (including additional files): " << ex.what() << std::endl;
- COUT(0) << CommandLine::getUsageInformation() << std::endl;
- throw GeneralException("");
- }
- }
-
- /**
- @brief
- Parses an argument based on its full name.
- @param name
- Full name of the argument
- @param value
- String containing the value
- */
- void CommandLine::checkFullArgument(const std::string& name, const std::string& value, bool bParsingFile)
- {
- std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgs_.find(name);
- if (it == cmdLineArgs_.end())
- ThrowException(Argument, "Command line argument '" + name + "' does not exist.");
-
- it->second->parse(value, bParsingFile);
- }
-
- /**
- @brief
- Parses an argument based on its shortcut.
- @param shortcut
- Shotcut to the argument
- @param value
- String containing the value
- */
- void CommandLine::checkShortcut(const std::string& shortcut, const std::string& value, bool bParsingFile)
- {
- std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgsShortcut_.find(shortcut);
- if (it == cmdLineArgsShortcut_.end())
- ThrowException(Argument, "Command line shortcut '" + shortcut + "' does not exist.");
-
- it->second->parse(value, bParsingFile);
- }
-
- std::string CommandLine::getUsageInformation()
- {
- CommandLine& inst = _getInstance();
- std::ostringstream infoStr;
-
- // determine maximum name size
- size_t maxNameSize = 0;
- for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin();
- it != inst.cmdLineArgs_.end(); ++it)
- {
- maxNameSize = std::max(it->second->getName().size(), maxNameSize);
- }
-
- infoStr << std::endl;
- infoStr << "Usage: orxonox [options]" << std::endl;
- infoStr << "Available options:" << std::endl;
-
- for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin();
- it != inst.cmdLineArgs_.end(); ++it)
- {
- if (it->second->getShortcut() != "")
- infoStr << " [-" << it->second->getShortcut() << "] ";
- else
- infoStr << " ";
- infoStr << "--" << it->second->getName() << " ";
- if (it->second->getValue().getType() != MT_Type::Bool)
- infoStr << "ARG ";
- else
- infoStr << " ";
- // fill with the necessary amount of blanks
- infoStr << std::string(maxNameSize - it->second->getName().size(), ' ');
- infoStr << ": " << it->second->getInformation();
- infoStr << std::endl;
- }
- return infoStr.str();
- }
-
- /**
- @brief
- Retrieves a CommandLineArgument.
- The method throws an exception if 'name' was not found or the value could not be converted.
- @note
- You shold of course not call this method before the command line has been parsed.
- */
- const CommandLineArgument* CommandLine::getArgument(const std::string& name)
- {
- std::map<std::string, CommandLineArgument*>::const_iterator it = _getInstance().cmdLineArgs_.find(name);
- if (it == _getInstance().cmdLineArgs_.end())
- {
- ThrowException(Argument, "Could find command line argument '" + name + "'.");
- }
- else
- {
- return it->second;
- }
- }
-
- /**
- @brief
- Parses only the command line for CommandLineArguments.
- */
- void CommandLine::_parseCommandLine(const std::string& cmdLine)
- {
- std::vector<std::string> args;
- SubString tokens(cmdLine, " ", " ", false, '\\', true, '"', true, '(', ')', false);
- for (unsigned i = 0; i < tokens.size(); ++i)
- args.push_back(tokens[i]);
- this->_parse(args, false);
- }
-
- /**
- @brief
- Parses start.ini (or the file specified with --optionsFile) for CommandLineArguments.
- */
- void CommandLine::_parseFile()
- {
- std::string filename = CommandLine::getValue("optionsFile").getString();
-
- // look for additional arguments in given file or start.ini as default
- // They will not overwrite the arguments given directly
- std::ifstream file;
- file.open((PathConfig::getConfigPathString() + filename).c_str());
- std::vector<std::string> args;
- if (file)
- {
- while (!file.eof())
- {
- std::string line;
- std::getline(file, line);
- line = removeTrailingWhitespaces(line);
- //if (!(line[0] == '#' || line[0] == '%'))
- //{
- SubString tokens(line, " ", " ", false, '\\', true, '"', true, '(', ')', false, '#');
- for (unsigned i = 0; i < tokens.size(); ++i)
- if (tokens[i][0] != '#')
- args.push_back(tokens[i]);
- //args.insert(args.end(), tokens.getAllStrings().begin(), tokens.getAllStrings().end());
- //}
- }
- file.close();
- }
-
- _parse(args, true);
- }
-}
Deleted: code/trunk/src/libraries/core/CommandLine.h
===================================================================
--- code/trunk/src/libraries/core/CommandLine.h 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/libraries/core/CommandLine.h 2009-11-04 11:28:59 UTC (rev 6021)
@@ -1,223 +0,0 @@
-/*
- * ORXONOX - the hottest 3D action shooter ever to exist
- * > www.orxonox.net <
- *
- *
- * License notice:
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * Author:
- * Reto Grieder
- * Co-authors:
- * ...
- *
- */
-
-#ifndef _CommandLine_H__
-#define _CommandLine_H__
-
-#include "CorePrereqs.h"
-
-#include <map>
-#include "util/OrxAssert.h"
-#include "util/MultiType.h"
-
-#define SetCommandLineArgument(name, defaultValue) \
- orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \
- = orxonox::CommandLine::addArgument(#name, defaultValue, false)
-#define SetCommandLineOnlyArgument(name, defaultValue) \
- orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \
- = orxonox::CommandLine::addArgument(#name, defaultValue, true)
-#define SetCommandLineSwitch(name) \
- orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \
- = orxonox::CommandLine::addArgument(#name, false, false)
-#define SetCommandLineOnlySwitch(name) \
- orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \
- = orxonox::CommandLine::addArgument(#name, false, true)
-
-
-namespace orxonox
-{
- /**
- @brief
- Container class for a command line argument of any type supported by MultiType.
-
- Whenever you want to have an option specified by a command line switch,
- you need to first define it with SetCommandLineArgument(name, defaultValue).
- It is then added to a map and possibly changed when the command line is being parsed.
- If the option was not given, you can detect this by asking hasDefaultValue().
-
- There is a possibility to define a short cut so you can write "-p 20" instead of "--port 20".
- Note the difference between "-" and "--"!
- Also, there is no restriction to the number of strings you add after --name.
- So "--startVector (2, 4, 5)" is perfectly legal.
-
- Retrieving an argument is possible with the getCommandLineArgument function of the
- CommandLine class. It is a Singleton, but the public interface is static.
- */
- class _CoreExport CommandLineArgument
- {
- friend class CommandLine;
-
- public:
- //! Tells whether the value has been changed by the command line.
- bool hasDefaultValue() const { return bHasDefaultValue_; }
- //! Returns the name of the argument.
- const std::string& getName() const { return name_; }
-
- //! Returns the shortcut (example: "-p 22" for "--port 22") of the argument.
- //! Evaluates to "" if there is none.
- const std::string& getShortcut() const { return shortcut_; }
- //! Sets the shortcut for the argument
- CommandLineArgument& shortcut(const std::string& shortcut)
- { this->shortcut_ = shortcut; return *this; }
-
- //! Returns the usage information
- const std::string& getInformation() const { return this->usageInformation_; }
- //! Sets the option information when displaying orxonox usage.
- CommandLineArgument& information(const std::string& usage)
- { this->usageInformation_ = usage; return *this; }
-
- //! Returns the actual value of the argument. Can be equal to default value.
- MultiType getValue() const { return value_; }
- //! Returns the given default value as type T.
- MultiType getDefaultValue() const { return defaultValue_; }
-
- private:
- //! Constructor initialises both value_ and defaultValue_ with defaultValue.
- CommandLineArgument(const std::string& name, const MultiType& defaultValue, bool bCommandLineOnly)
- : bHasDefaultValue_(true)
- , name_(name)
- , value_(defaultValue)
- , defaultValue_(defaultValue)
- , bCommandLineOnly_(bCommandLineOnly)
- { }
-
- //! Undefined copy constructor
- CommandLineArgument(const CommandLineArgument& instance);
- ~CommandLineArgument() { }
-
- //! Parses the value string of a command line argument.
- void parse(const std::string& value, bool bParsingFile);
-
- //! Tells whether the value has been changed by the command line.
- bool bHasDefaultValue_;
-
- private:
- std::string name_; //!< Name of the argument
- std::string shortcut_; //!< Shortcut of the argument. @see getShortcut().
- std::string usageInformation_; //!< Tells about the usage of this parameter
-
- MultiType value_; //!< The actual value
- MultiType defaultValue_; //!< Default value. Should not be changed.
- bool bCommandLineOnly_; //!< Whether you cannot specify the value in a text file
- };
-
-
- /**
- @brief
- Global interface to command line options.
- Allows to add and retrieve command line arguments. Also does the parsing.
- @note
- Internally it is a Singleton, but the public interface is static.
- @see
- CommandLineArgument
- */
- class _CoreExport CommandLine
- {
- public:
-
- //! Parse redirection to internal member method.
- static void parseCommandLine(const std::string& cmdLine) { _getInstance()._parseCommandLine(cmdLine); }
- static void parseFile() { _getInstance()._parseFile(); }
-
- static std::string getUsageInformation();
-
- static const CommandLineArgument* getArgument(const std::string& name);
- //! Writes the argument value in the given parameter.
- template <class T>
- static void getValue(const std::string& name, T* value)
- { *value = (T)(getArgument(name)->getValue()); }
- static MultiType getValue(const std::string& name)
- { return getArgument(name)->getValue(); }
- template <class T>
- static CommandLineArgument& addArgument(const std::string& name, T defaultValue, bool bCommandLineOnly);
-
- static bool existsArgument(const std::string& name)
- {
- std::map<std::string, CommandLineArgument*>::const_iterator it = _getInstance().cmdLineArgs_.find(name);
- return !(it == _getInstance().cmdLineArgs_.end());
- }
-
- static void destroyAllArguments();
-
- private:
- //! Constructor initialises bFirstTimeParse_ with true.
- CommandLine() : bFirstTimeParse_(true) { }
- //! Undefined copy constructor
- CommandLine(const CommandLine& instance);
- ~CommandLine();
-
- static CommandLine& _getInstance();
-
- void _parseCommandLine(const std::string& cmdLine);
- void _parseFile();
- void _parse(const std::vector<std::string>& arguments, bool bParsingFile);
- void checkFullArgument(const std::string& name, const std::string& value, bool bParsingFile);
- void checkShortcut(const std::string& shortcut, const std::string& value, bool bParsingFile);
-
- /**
- Tells whether we parsed for the first time. The CommmandLineArguments are added before main().
- So when we call parse() the first time, we need to create a map with all shortcuts since these
- get added after addCommandLineArgument().
- */
- bool bFirstTimeParse_;
-
- //! Holds all pointers to the arguments and serves as a search map by name.
- std::map<std::string, CommandLineArgument*> cmdLineArgs_;
- //! Search map by shortcut for the arguments.
- std::map<std::string, CommandLineArgument*> cmdLineArgsShortcut_;
- };
-
- template <>
- inline void CommandLine::getValue<std::string>(const std::string& name, std::string* value)
- {
- *value = getArgument(name)->getValue().getString();
- }
-
- /**
- @brief
- Adds a new CommandLineArgument to the internal map.
- Note that only such arguments are actually valid.
- @param name
- Name of the argument. Shortcut can be added later.
- @param defaultValue
- Default value that is used when argument was not given.
- */
- template <class T>
- CommandLineArgument& CommandLine::addArgument(const std::string& name, T defaultValue, bool bCommandLineOnly)
- {
- OrxAssert(!_getInstance().existsArgument(name),
- "Cannot add a command line argument with name '" + name + "' twice.");
- OrxAssert(MultiType(defaultValue).getType() != MT_Type::Bool || MultiType(defaultValue).getBool() != true,
- "Boolean command line arguments with positive default values are not supported." << std::endl
- << "Please use SetCommandLineSwitch and adjust your argument: " << name);
-
- return *(_getInstance().cmdLineArgs_[name] = new CommandLineArgument(name, defaultValue, bCommandLineOnly));
- }
-}
-
-#endif /* _CommandLine_H__ */
Copied: code/trunk/src/libraries/core/CommandLineParser.cc (from rev 6014, code/branches/console/src/libraries/core/CommandLine.cc)
===================================================================
--- code/trunk/src/libraries/core/CommandLineParser.cc (rev 0)
+++ code/trunk/src/libraries/core/CommandLineParser.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -0,0 +1,377 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Reto Grieder
+ * Co-authors:
+ * ...
+ *
+ */
+
+#include "CommandLineParser.h"
+
+#include <algorithm>
+#include <sstream>
+
+#include "util/Convert.h"
+#include "util/Debug.h"
+#include "util/Exception.h"
+#include "util/StringUtils.h"
+#include "util/SubString.h"
+#include "PathConfig.h"
+
+namespace orxonox
+{
+ SetCommandLineOnlyArgument(optionsFile, "start.ini").shortcut("o");
+
+ /**
+ @brief
+ Parses a value string for a command line argument.
+ It simply uses convertValue(Output, Input) to do that.
+ Bools are treated specially. That is necessary
+ so that you can have simple command line switches.
+ */
+ void CommandLineArgument::parse(const std::string& value, bool bParsingFile)
+ {
+ if (bParsingFile && this->bCommandLineOnly_)
+ ThrowException(Argument, "Command line argument '" + getName() + "' is not allowed in files.");
+ if (value_.getType() == MT_Type::Bool)
+ {
+ // simulate command line switch
+ bool temp;
+ if (convertValue(&temp, value))
+ {
+ this->bHasDefaultValue_ = false;
+ this->value_ = temp;
+ }
+ else if (value == "")
+ {
+ this->bHasDefaultValue_ = false;
+ this->value_ = true;
+ }
+ else
+ ThrowException(Argument, "Could not read command line argument '" + getName() + "'.");
+ }
+ else
+ {
+ if (!value_.setValue(value))
+ {
+ value_.setValue(defaultValue_);
+ ThrowException(Argument, "Could not read command line argument '" + getName() + "'.");
+ }
+ else
+ this->bHasDefaultValue_ = false;
+ }
+ }
+
+
+ /**
+ @brief
+ Destructor destroys all CommandLineArguments with it.
+ */
+ CommandLineParser::~CommandLineParser()
+ {
+ CommandLineParser::destroyAllArguments();
+ }
+
+ /**
+ @brief
+ Returns a unique instance (Meyers Singleton).
+ */
+ CommandLineParser& CommandLineParser::_getInstance()
+ {
+ static CommandLineParser instance;
+ return instance;
+ }
+
+ /**
+ @brief
+ Destroys all command line arguments. This should be called at the end
+ of main. Do not use before that.
+ */
+ void CommandLineParser::destroyAllArguments()
+ {
+ for (std::map<std::string, CommandLineArgument*>::const_iterator it = _getInstance().cmdLineArgs_.begin();
+ it != _getInstance().cmdLineArgs_.end(); ++it)
+ delete it->second;
+ _getInstance().cmdLineArgs_.clear();
+ }
+
+ /**
+ @brief
+ Reads the command line parses the values of each argument.
+ It is then stored in the corresponding CommandLineArgument.
+ @note
+ The reason that you have to provide the string to be parsed as
+ space separted list is because of argc and argv. If you only have
+ a whole string, simply use getAllStrings() of SubString.
+ @param arguments
+ Vector of space separated strings.
+ */
+ void CommandLineParser::_parse(const std::vector<std::string>& arguments, bool bParsingFile)
+ {
+ try
+ {
+ // why this? See bFirstTimeParse_ declaration.
+ if (bFirstTimeParse_)
+ {
+ // first shove all the shortcuts in a map
+ for (std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgs_.begin();
+ it != cmdLineArgs_.end(); ++it)
+ {
+ OrxAssert(cmdLineArgsShortcut_.find(it->second->getShortcut()) == cmdLineArgsShortcut_.end(),
+ "Cannot have two command line shortcut with the same name.");
+ if (it->second->getShortcut() != "")
+ cmdLineArgsShortcut_[it->second->getShortcut()] = it->second;
+ }
+ bFirstTimeParse_ = false;
+ }
+
+ std::string name;
+ std::string shortcut;
+ std::string value;
+ for (unsigned int i = 0; i < arguments.size(); ++i)
+ {
+ if (arguments[i].size() != 0)
+ {
+ // sure not ""
+ if (arguments[i][0] == '-')
+ {
+ // start with "-"
+ if (arguments[i].size() == 1)
+ {
+ // argument[i] is "-", probably a minus sign
+ value += "- ";
+ }
+ else if (arguments[i][1] <= 57 && arguments[i][1] >= 48)
+ {
+ // negative number as a value
+ value += arguments[i] + " ";
+ }
+ else
+ {
+ // can be shortcut or full name argument
+
+ // save old data first
+ value = removeTrailingWhitespaces(value);
+ if (name != "")
+ {
+ checkFullArgument(name, value, bParsingFile);
+ name = "";
+ assert(shortcut == "");
+ }
+ else if (shortcut != "")
+ {
+ checkShortcut(shortcut, value, bParsingFile);
+ shortcut = "";
+ assert(name == "");
+ }
+
+ if (arguments[i][1] == '-')
+ {
+ // full name argument with "--name"
+ name = arguments[i].substr(2);
+ }
+ else
+ {
+ // shortcut with "-s"
+ shortcut = arguments[i].substr(1);
+ }
+
+ // reset value string
+ value = "";
+ }
+ }
+ else
+ {
+ // value string
+
+ if (name == "" && shortcut == "")
+ {
+ ThrowException(Argument, "Expected \"-\" or \"-\" in command line arguments.\n");
+ }
+
+ // Concatenate strings as long as there's no new argument by "-" or "--"
+ value += arguments[i] + ' ';
+ }
+ }
+ }
+
+ // parse last argument
+ value = removeTrailingWhitespaces(value);
+ if (name != "")
+ {
+ checkFullArgument(name, value, bParsingFile);
+ assert(shortcut == "");
+ }
+ else if (shortcut != "")
+ {
+ checkShortcut(shortcut, value, bParsingFile);
+ assert(name == "");
+ }
+ }
+ catch (const ArgumentException& ex)
+ {
+ COUT(0) << "Could not parse command line (including additional files): " << ex.what() << std::endl;
+ COUT(0) << CommandLineParser::getUsageInformation() << std::endl;
+ throw GeneralException("");
+ }
+ }
+
+ /**
+ @brief
+ Parses an argument based on its full name.
+ @param name
+ Full name of the argument
+ @param value
+ String containing the value
+ */
+ void CommandLineParser::checkFullArgument(const std::string& name, const std::string& value, bool bParsingFile)
+ {
+ std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgs_.find(name);
+ if (it == cmdLineArgs_.end())
+ ThrowException(Argument, "Command line argument '" + name + "' does not exist.");
+
+ it->second->parse(value, bParsingFile);
+ }
+
+ /**
+ @brief
+ Parses an argument based on its shortcut.
+ @param shortcut
+ Shotcut to the argument
+ @param value
+ String containing the value
+ */
+ void CommandLineParser::checkShortcut(const std::string& shortcut, const std::string& value, bool bParsingFile)
+ {
+ std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgsShortcut_.find(shortcut);
+ if (it == cmdLineArgsShortcut_.end())
+ ThrowException(Argument, "Command line shortcut '" + shortcut + "' does not exist.");
+
+ it->second->parse(value, bParsingFile);
+ }
+
+ std::string CommandLineParser::getUsageInformation()
+ {
+ CommandLineParser& inst = _getInstance();
+ std::ostringstream infoStr;
+
+ // determine maximum name size
+ size_t maxNameSize = 0;
+ for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin();
+ it != inst.cmdLineArgs_.end(); ++it)
+ {
+ maxNameSize = std::max(it->second->getName().size(), maxNameSize);
+ }
+
+ infoStr << std::endl;
+ infoStr << "Usage: orxonox [options]" << std::endl;
+ infoStr << "Available options:" << std::endl;
+
+ for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin();
+ it != inst.cmdLineArgs_.end(); ++it)
+ {
+ if (it->second->getShortcut() != "")
+ infoStr << " [-" << it->second->getShortcut() << "] ";
+ else
+ infoStr << " ";
+ infoStr << "--" << it->second->getName() << " ";
+ if (it->second->getValue().getType() != MT_Type::Bool)
+ infoStr << "ARG ";
+ else
+ infoStr << " ";
+ // fill with the necessary amount of blanks
+ infoStr << std::string(maxNameSize - it->second->getName().size(), ' ');
+ infoStr << ": " << it->second->getInformation();
+ infoStr << std::endl;
+ }
+ return infoStr.str();
+ }
+
+ /**
+ @brief
+ Retrieves a CommandLineArgument.
+ The method throws an exception if 'name' was not found or the value could not be converted.
+ @note
+ You shold of course not call this method before the command line has been parsed.
+ */
+ const CommandLineArgument* CommandLineParser::getArgument(const std::string& name)
+ {
+ std::map<std::string, CommandLineArgument*>::const_iterator it = _getInstance().cmdLineArgs_.find(name);
+ if (it == _getInstance().cmdLineArgs_.end())
+ {
+ ThrowException(Argument, "Could find command line argument '" + name + "'.");
+ }
+ else
+ {
+ return it->second;
+ }
+ }
+
+ /**
+ @brief
+ Parses only the command line for CommandLineArguments.
+ */
+ void CommandLineParser::_parseCommandLine(const std::string& cmdLine)
+ {
+ std::vector<std::string> args;
+ SubString tokens(cmdLine, " ", " ", false, '\\', true, '"', true, '(', ')', false);
+ for (unsigned i = 0; i < tokens.size(); ++i)
+ args.push_back(tokens[i]);
+ this->_parse(args, false);
+ }
+
+ /**
+ @brief
+ Parses start.ini (or the file specified with --optionsFile) for CommandLineArguments.
+ */
+ void CommandLineParser::_parseFile()
+ {
+ std::string filename = CommandLineParser::getValue("optionsFile").getString();
+
+ // look for additional arguments in given file or start.ini as default
+ // They will not overwrite the arguments given directly
+ std::ifstream file;
+ file.open((PathConfig::getConfigPathString() + filename).c_str());
+ std::vector<std::string> args;
+ if (file)
+ {
+ while (!file.eof())
+ {
+ std::string line;
+ std::getline(file, line);
+ line = removeTrailingWhitespaces(line);
+ //if (!(line[0] == '#' || line[0] == '%'))
+ //{
+ SubString tokens(line, " ", " ", false, '\\', true, '"', true, '(', ')', false, '#');
+ for (unsigned i = 0; i < tokens.size(); ++i)
+ if (tokens[i][0] != '#')
+ args.push_back(tokens[i]);
+ //args.insert(args.end(), tokens.getAllStrings().begin(), tokens.getAllStrings().end());
+ //}
+ }
+ file.close();
+ }
+
+ _parse(args, true);
+ }
+}
Copied: code/trunk/src/libraries/core/CommandLineParser.h (from rev 6014, code/branches/console/src/libraries/core/CommandLine.h)
===================================================================
--- code/trunk/src/libraries/core/CommandLineParser.h (rev 0)
+++ code/trunk/src/libraries/core/CommandLineParser.h 2009-11-04 11:28:59 UTC (rev 6021)
@@ -0,0 +1,223 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Reto Grieder
+ * Co-authors:
+ * ...
+ *
+ */
+
+#ifndef _CommandLine_H__
+#define _CommandLine_H__
+
+#include "CorePrereqs.h"
+
+#include <map>
+#include "util/OrxAssert.h"
+#include "util/MultiType.h"
+
+#define SetCommandLineArgument(name, defaultValue) \
+ orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \
+ = orxonox::CommandLineParser::addArgument(#name, defaultValue, false)
+#define SetCommandLineOnlyArgument(name, defaultValue) \
+ orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \
+ = orxonox::CommandLineParser::addArgument(#name, defaultValue, true)
+#define SetCommandLineSwitch(name) \
+ orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \
+ = orxonox::CommandLineParser::addArgument(#name, false, false)
+#define SetCommandLineOnlySwitch(name) \
+ orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \
+ = orxonox::CommandLineParser::addArgument(#name, false, true)
+
+
+namespace orxonox
+{
+ /**
+ @brief
+ Container class for a command line argument of any type supported by MultiType.
+
+ Whenever you want to have an option specified by a command line switch,
+ you need to first define it with SetCommandLineArgument(name, defaultValue).
+ It is then added to a map and possibly changed when the command line is being parsed.
+ If the option was not given, you can detect this by asking hasDefaultValue().
+
+ There is a possibility to define a short cut so you can write "-p 20" instead of "--port 20".
+ Note the difference between "-" and "--"!
+ Also, there is no restriction to the number of strings you add after --name.
+ So "--startVector (2, 4, 5)" is perfectly legal.
+
+ Retrieving an argument is possible with the getCommandLineArgument function of the
+ CommandLineParser class. It is a Singleton, but the public interface is static.
+ */
+ class _CoreExport CommandLineArgument
+ {
+ friend class CommandLineParser;
+
+ public:
+ //! Tells whether the value has been changed by the command line.
+ bool hasDefaultValue() const { return bHasDefaultValue_; }
+ //! Returns the name of the argument.
+ const std::string& getName() const { return name_; }
+
+ //! Returns the shortcut (example: "-p 22" for "--port 22") of the argument.
+ //! Evaluates to "" if there is none.
+ const std::string& getShortcut() const { return shortcut_; }
+ //! Sets the shortcut for the argument
+ CommandLineArgument& shortcut(const std::string& shortcut)
+ { this->shortcut_ = shortcut; return *this; }
+
+ //! Returns the usage information
+ const std::string& getInformation() const { return this->usageInformation_; }
+ //! Sets the option information when displaying orxonox usage.
+ CommandLineArgument& information(const std::string& usage)
+ { this->usageInformation_ = usage; return *this; }
+
+ //! Returns the actual value of the argument. Can be equal to default value.
+ MultiType getValue() const { return value_; }
+ //! Returns the given default value as type T.
+ MultiType getDefaultValue() const { return defaultValue_; }
+
+ private:
+ //! Constructor initialises both value_ and defaultValue_ with defaultValue.
+ CommandLineArgument(const std::string& name, const MultiType& defaultValue, bool bCommandLineOnly)
+ : bHasDefaultValue_(true)
+ , name_(name)
+ , value_(defaultValue)
+ , defaultValue_(defaultValue)
+ , bCommandLineOnly_(bCommandLineOnly)
+ { }
+
+ //! Undefined copy constructor
+ CommandLineArgument(const CommandLineArgument& instance);
+ ~CommandLineArgument() { }
+
+ //! Parses the value string of a command line argument.
+ void parse(const std::string& value, bool bParsingFile);
+
+ //! Tells whether the value has been changed by the command line.
+ bool bHasDefaultValue_;
+
+ private:
+ std::string name_; //!< Name of the argument
+ std::string shortcut_; //!< Shortcut of the argument. @see getShortcut().
+ std::string usageInformation_; //!< Tells about the usage of this parameter
+
+ MultiType value_; //!< The actual value
+ MultiType defaultValue_; //!< Default value. Should not be changed.
+ bool bCommandLineOnly_; //!< Whether you cannot specify the value in a text file
+ };
+
+
+ /**
+ @brief
+ Global interface to command line options.
+ Allows to add and retrieve command line arguments. Also does the parsing.
+ @note
+ Internally it is a Singleton, but the public interface is static.
+ @see
+ CommandLineArgument
+ */
+ class _CoreExport CommandLineParser
+ {
+ public:
+
+ //! Parse redirection to internal member method.
+ static void parseCommandLine(const std::string& cmdLine) { _getInstance()._parseCommandLine(cmdLine); }
+ static void parseFile() { _getInstance()._parseFile(); }
+
+ static std::string getUsageInformation();
+
+ static const CommandLineArgument* getArgument(const std::string& name);
+ //! Writes the argument value in the given parameter.
+ template <class T>
+ static void getValue(const std::string& name, T* value)
+ { *value = (T)(getArgument(name)->getValue()); }
+ static MultiType getValue(const std::string& name)
+ { return getArgument(name)->getValue(); }
+ template <class T>
+ static CommandLineArgument& addArgument(const std::string& name, T defaultValue, bool bCommandLineOnly);
+
+ static bool existsArgument(const std::string& name)
+ {
+ std::map<std::string, CommandLineArgument*>::const_iterator it = _getInstance().cmdLineArgs_.find(name);
+ return !(it == _getInstance().cmdLineArgs_.end());
+ }
+
+ static void destroyAllArguments();
+
+ private:
+ //! Constructor initialises bFirstTimeParse_ with true.
+ CommandLineParser() : bFirstTimeParse_(true) { }
+ //! Undefined copy constructor
+ CommandLineParser(const CommandLineParser& instance);
+ ~CommandLineParser();
+
+ static CommandLineParser& _getInstance();
+
+ void _parseCommandLine(const std::string& cmdLine);
+ void _parseFile();
+ void _parse(const std::vector<std::string>& arguments, bool bParsingFile);
+ void checkFullArgument(const std::string& name, const std::string& value, bool bParsingFile);
+ void checkShortcut(const std::string& shortcut, const std::string& value, bool bParsingFile);
+
+ /**
+ Tells whether we parsed for the first time. The CommmandLineArguments are added before main().
+ So when we call parse() the first time, we need to create a map with all shortcuts since these
+ get added after addCommandLineArgument().
+ */
+ bool bFirstTimeParse_;
+
+ //! Holds all pointers to the arguments and serves as a search map by name.
+ std::map<std::string, CommandLineArgument*> cmdLineArgs_;
+ //! Search map by shortcut for the arguments.
+ std::map<std::string, CommandLineArgument*> cmdLineArgsShortcut_;
+ };
+
+ template <>
+ inline void CommandLineParser::getValue<std::string>(const std::string& name, std::string* value)
+ {
+ *value = getArgument(name)->getValue().getString();
+ }
+
+ /**
+ @brief
+ Adds a new CommandLineArgument to the internal map.
+ Note that only such arguments are actually valid.
+ @param name
+ Name of the argument. Shortcut can be added later.
+ @param defaultValue
+ Default value that is used when argument was not given.
+ */
+ template <class T>
+ CommandLineArgument& CommandLineParser::addArgument(const std::string& name, T defaultValue, bool bCommandLineOnly)
+ {
+ OrxAssert(!_getInstance().existsArgument(name),
+ "Cannot add a command line argument with name '" + name + "' twice.");
+ OrxAssert(MultiType(defaultValue).getType() != MT_Type::Bool || MultiType(defaultValue).getBool() != true,
+ "Boolean command line arguments with positive default values are not supported." << std::endl
+ << "Please use SetCommandLineSwitch and adjust your argument: " << name);
+
+ return *(_getInstance().cmdLineArgs_[name] = new CommandLineArgument(name, defaultValue, bCommandLineOnly));
+ }
+}
+
+#endif /* _CommandLine_H__ */
Modified: code/trunk/src/libraries/core/Core.cc
===================================================================
--- code/trunk/src/libraries/core/Core.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/libraries/core/Core.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -53,7 +53,7 @@
#include "util/SignalHandler.h"
#include "PathConfig.h"
#include "CommandExecutor.h"
-#include "CommandLine.h"
+#include "CommandLineParser.h"
#include "ConfigFileManager.h"
#include "ConfigValueIncludes.h"
#include "CoreIncludes.h"
@@ -215,7 +215,7 @@
}
// Parse command line arguments AFTER the modules have been loaded (static code!)
- CommandLine::parseCommandLine(cmdLine);
+ CommandLineParser::parseCommandLine(cmdLine);
// Set configurable paths like log, config and media
this->pathConfig_->setConfigurablePaths();
@@ -229,13 +229,13 @@
OutputHandler::getOutStream().setLogPath(PathConfig::getLogPathString());
// Parse additional options file now that we know its path
- CommandLine::parseFile();
+ CommandLineParser::parseFile();
#ifdef ORXONOX_PLATFORM_WINDOWS
// limit the main thread to the first core so that QueryPerformanceCounter doesn't jump
// do this after ogre has initialised. Somehow Ogre changes the settings again (not through
// the timer though).
- int limitToCPU = CommandLine::getValue("limitToCPU");
+ int limitToCPU = CommandLineParser::getValue("limitToCPU");
if (limitToCPU > 0)
setThreadAffinity(static_cast<unsigned int>(limitToCPU));
#endif
@@ -243,7 +243,7 @@
// Manage ini files and set the default settings file (usually orxonox.ini)
this->configFileManager_.reset(new ConfigFileManager());
this->configFileManager_->setFilename(ConfigFileType::Settings,
- CommandLine::getValue("settingsFile").getString());
+ CommandLineParser::getValue("settingsFile").getString());
// Required as well for the config values
this->languageInstance_.reset(new Language());
Modified: code/trunk/src/libraries/core/CorePrereqs.h
===================================================================
--- code/trunk/src/libraries/core/CorePrereqs.h 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/libraries/core/CorePrereqs.h 2009-11-04 11:28:59 UTC (rev 6021)
@@ -115,7 +115,7 @@
class ClassTreeMaskNode;
class ClassTreeMaskObjectIterator;
class CommandEvaluation;
- class CommandLine;
+ class CommandLineParser;
class CommandLineArgument;
class ConfigFile;
class ConfigFileEntry;
Modified: code/trunk/src/libraries/core/Game.cc
===================================================================
--- code/trunk/src/libraries/core/Game.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/libraries/core/Game.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -43,7 +43,7 @@
#include "util/ScopeGuard.h"
#include "util/Sleep.h"
#include "util/SubString.h"
-#include "CommandLine.h"
+#include "CommandLineParser.h"
#include "ConsoleCommand.h"
#include "Core.h"
#include "CoreIncludes.h"
Modified: code/trunk/src/libraries/core/PathConfig.cc
===================================================================
--- code/trunk/src/libraries/core/PathConfig.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/libraries/core/PathConfig.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -53,7 +53,7 @@
#include "SpecialConfig.h"
#include "util/Debug.h"
#include "util/Exception.h"
-#include "CommandLine.h"
+#include "CommandLineParser.h"
// Boost 1.36 has some issues with deprecated functions that have been omitted
#if (BOOST_VERSION == 103600)
@@ -185,8 +185,8 @@
logPath_ = specialConfig::logDevDirectory;
// Check for data path override by the command line
- if (!CommandLine::getArgument("externalDataPath")->hasDefaultValue())
- externalDataPath_ = CommandLine::getValue("externalDataPath").getString();
+ if (!CommandLineParser::getArgument("externalDataPath")->hasDefaultValue())
+ externalDataPath_ = CommandLineParser::getValue("externalDataPath").getString();
else
externalDataPath_ = specialConfig::externalDataDevDirectory;
}
@@ -223,9 +223,9 @@
}
// Option to put all the config and log files in a separate folder
- if (!CommandLine::getArgument("writingPathSuffix")->hasDefaultValue())
+ if (!CommandLineParser::getArgument("writingPathSuffix")->hasDefaultValue())
{
- std::string directory(CommandLine::getValue("writingPathSuffix").getString());
+ std::string directory(CommandLineParser::getValue("writingPathSuffix").getString());
configPath_ = configPath_ / directory;
logPath_ = logPath_ / directory;
}
Modified: code/trunk/src/libraries/core/input/InputManager.cc
===================================================================
--- code/trunk/src/libraries/core/input/InputManager.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/libraries/core/input/InputManager.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -47,7 +47,7 @@
#include "core/CoreIncludes.h"
#include "core/ConfigValueIncludes.h"
#include "core/ConsoleCommand.h"
-#include "core/CommandLine.h"
+#include "core/CommandLineParser.h"
#include "core/Functor.h"
#include "core/GraphicsManager.h"
@@ -169,7 +169,7 @@
if (mouseMode_ == MouseMode::Exclusive || GraphicsManager::getInstance().isFullScreen())
{
- if (CommandLine::getValue("keyboard_no_grab").getBool())
+ if (CommandLineParser::getValue("keyboard_no_grab").getBool())
paramList.insert(std::make_pair("x11_keyboard_grab", "false"));
else
paramList.insert(std::make_pair("x11_keyboard_grab", "true"));
Modified: code/trunk/src/orxonox/LevelManager.cc
===================================================================
--- code/trunk/src/orxonox/LevelManager.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/orxonox/LevelManager.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -31,7 +31,7 @@
#include <map>
#include <OgreResourceGroupManager.h>
-#include "core/CommandLine.h"
+#include "core/CommandLineParser.h"
#include "core/ConfigValueIncludes.h"
#include "core/CoreIncludes.h"
#include "core/Loader.h"
@@ -52,9 +52,9 @@
this->setConfigValues();
// check override
- if (!CommandLine::getArgument("level")->hasDefaultValue())
+ if (!CommandLineParser::getArgument("level")->hasDefaultValue())
{
- ModifyConfigValue(defaultLevelName_, tset, CommandLine::getValue("level").getString());
+ ModifyConfigValue(defaultLevelName_, tset, CommandLineParser::getValue("level").getString());
}
}
Modified: code/trunk/src/orxonox/Main.cc
===================================================================
--- code/trunk/src/orxonox/Main.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/orxonox/Main.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -35,7 +35,7 @@
#include "OrxonoxPrereqs.h"
-#include "core/CommandLine.h"
+#include "core/CommandLineParser.h"
#include "core/Game.h"
#include "core/LuaState.h"
#include "ToluaBindOrxonox.h"
@@ -75,17 +75,17 @@
game->requestState("root");
// Some development hacks (not really, but in the future, this calls won't make sense anymore)
- if (CommandLine::getValue("standalone").getBool())
+ if (CommandLineParser::getValue("standalone").getBool())
Game::getInstance().requestStates("graphics, standalone, level");
- else if (CommandLine::getValue("server").getBool())
+ else if (CommandLineParser::getValue("server").getBool())
Game::getInstance().requestStates("graphics, server, level");
- else if (CommandLine::getValue("client").getBool())
+ else if (CommandLineParser::getValue("client").getBool())
Game::getInstance().requestStates("graphics, client, level");
- else if (CommandLine::getValue("dedicated").getBool())
+ else if (CommandLineParser::getValue("dedicated").getBool())
Game::getInstance().requestStates("dedicated, level");
- else if (CommandLine::getValue("dedicatedClient").getBool())
+ else if (CommandLineParser::getValue("dedicatedClient").getBool())
Game::getInstance().requestStates("dedicatedClient, level");
- else if (CommandLine::getValue("console").getBool())
+ else if (CommandLineParser::getValue("console").getBool())
Game::getInstance().requestStates("ioConsole");
else
Game::getInstance().requestStates("graphics, mainMenu");
Modified: code/trunk/src/orxonox/gamestates/GSClient.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSClient.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/orxonox/gamestates/GSClient.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -30,7 +30,7 @@
#include "util/Clock.h"
#include "util/Exception.h"
-#include "core/CommandLine.h"
+#include "core/CommandLineParser.h"
#include "core/Game.h"
#include "core/GameMode.h"
#include "network/Client.h"
@@ -55,7 +55,7 @@
{
GameMode::setIsClient(true);
- this->client_ = new Client(CommandLine::getValue("ip").getString(), CommandLine::getValue("port"));
+ this->client_ = new Client(CommandLineParser::getValue("ip").getString(), CommandLineParser::getValue("port"));
if(!client_->establishConnection())
ThrowException(InitialisationFailed, "Could not establish connection with server.");
Modified: code/trunk/src/orxonox/gamestates/GSDedicated.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSDedicated.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/orxonox/gamestates/GSDedicated.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -35,7 +35,7 @@
#include "util/Clock.h"
#include "util/Debug.h"
#include "util/Sleep.h"
-#include "core/CommandLine.h"
+#include "core/CommandLineParse.h"
#include "core/CommandExecutor.h"
#include "core/Game.h"
#include "core/GameMode.h"
@@ -80,7 +80,7 @@
this->setTerminalMode();
#endif
- this->server_ = new Server(CommandLine::getValue("port"));
+ this->server_ = new Server(CommandLineParser::getValue("port"));
COUT(0) << "Loading scene in server mode" << std::endl;
server_->open();
@@ -90,7 +90,7 @@
{
this->server_->close();
delete this->server_;
-
+
closeThread_ = true;
#ifdef ORXONOX_PLATFORM_UNIX
std::cout << "\033[0G\033[K";
@@ -137,7 +137,7 @@
{
escapeChar = 2;
continue;
- }
+}
else if ( escapeChar == 2 )
{
switch (c)
Modified: code/trunk/src/orxonox/gamestates/GSDedicatedClient.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSDedicatedClient.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/orxonox/gamestates/GSDedicatedClient.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -27,49 +27,49 @@
*/
#include "GSDedicatedClient.h"
-
+
#include <iomanip>
#include <iostream>
#include <boost/bind.hpp>
-#include "util/Clock.h"
+#include "util/Clock.h"
#include "util/Debug.h"
#include "util/Exception.h"
#include "util/Sleep.h"
-#include "core/CommandLine.h"
+#include "core/CommandLineParser.h"
#include "core/CommandExecutor.h"
#include "core/Game.h"
#include "core/GameMode.h"
#include "network/Client.h"
-
+
#ifdef ORXONOX_PLATFORM_UNIX
#include <termios.h>
#endif
-namespace orxonox
-{
+namespace orxonox
+{
const unsigned int MAX_COMMAND_LENGTH = 255;
- DeclareGameState(GSDedicatedClient, "dedicatedClient", false, false);
-
+ DeclareGameState(GSDedicatedClient, "dedicatedClient", false, false);
+
termios* GSDedicatedClient::originalTerminalSettings_;
- GSDedicatedClient::GSDedicatedClient(const GameStateInfo& info)
- : GameState(info)
- , client_(0)
+ GSDedicatedClient::GSDedicatedClient(const GameStateInfo& info)
+ : GameState(info)
+ , client_(0)
, closeThread_(false)
, cleanLine_(true)
, inputIterator_(0)
, cursorX_(0)
, cursorY_(0)
- {
- }
-
- GSDedicatedClient::~GSDedicatedClient()
- {
- }
-
+ {
+ }
+
+ GSDedicatedClient::~GSDedicatedClient()
+ {
+ }
+
void GSDedicatedClient::activate()
{
this->inputThread_ = new boost::thread(boost::bind(&GSDedicatedClient::inputThread, this));
@@ -79,7 +79,7 @@
this->setTerminalMode();
#endif
- this->client_ = new Client(CommandLine::getValue("ip").getString(), CommandLine::getValue("port"));
+ this->client_ = new Client(CommandLineParser::getValue("ip").getString(), CommandLine::getValue("port"));
COUT(0) << "Loading scene in client mode" << std::endl;
if( !client_->establishConnection() )
@@ -88,16 +88,16 @@
client_->update(Game::getInstance().getGameClock());
- }
-
- void GSDedicatedClient::deactivate()
- {
- if( this->client_ )
+ }
+
+ void GSDedicatedClient::deactivate()
+ {
+ if (this->client_)
{
this->client_->closeConnection();
delete this->client_;
}
-
+
closeThread_ = true;
#ifdef ORXONOX_PLATFORM_UNIX
std::cout << "\033[0G\033[K";
@@ -109,14 +109,14 @@
#endif
inputThread_->join();
delete this->inputThread_;
- }
-
- void GSDedicatedClient::update(const Clock& time)
- {
+ }
+
+ void GSDedicatedClient::update(const Clock& time)
+ {
client_->update(time);
processQueue();
printLine();
- }
+ }
void GSDedicatedClient::inputThread()
{
@@ -142,7 +142,7 @@
{
escapeChar = 2;
continue;
- }
+}
else if ( escapeChar == 2 )
{
switch (c)
Modified: code/trunk/src/orxonox/gamestates/GSServer.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSServer.cc 2009-11-03 21:08:26 UTC (rev 6020)
+++ code/trunk/src/orxonox/gamestates/GSServer.cc 2009-11-04 11:28:59 UTC (rev 6021)
@@ -29,7 +29,7 @@
#include "GSServer.h"
#include "util/Debug.h"
-#include "core/CommandLine.h"
+#include "core/CommandLineParser.h"
#include "core/Game.h"
#include "core/GameMode.h"
#include "network/Server.h"
@@ -54,7 +54,7 @@
{
GameMode::setHasServer(true);
- this->server_ = new Server(CommandLine::getValue("port"));
+ this->server_ = new Server(CommandLineParser::getValue("port"));
COUT(0) << "Loading scene in server mode" << std::endl;
server_->open();
More information about the Orxonox-commit
mailing list