188 lines
6.1 KiB
C++
188 lines
6.1 KiB
C++
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
// Copyright (C) 2010 Winch Gate Property Limited
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as
|
|
// published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#include <iostream>
|
|
#include <sstream>
|
|
|
|
#include "nel/misc/types_nl.h"
|
|
#include "nel/misc/debug.h"
|
|
#include "nel/misc/log.h"
|
|
#include "nel/misc/displayer.h"
|
|
|
|
// include the command system
|
|
#include "nel/misc/command.h"
|
|
#include "nel/misc/variable.h"
|
|
|
|
|
|
//
|
|
// Commands
|
|
//
|
|
|
|
// with this macro, you can execute a specific command in real time.
|
|
// this is an example of a command, the first param is the name of the command
|
|
// (note that it is *not* a string). the second param is the help string that will
|
|
// be displayed when the user calls the help command. the third param is the
|
|
// usage of the command. it can the an empty string when the command doesn't
|
|
// need any parameters.
|
|
// when the program is launched, you can type the name of the command with
|
|
// parameters if needed and it will be executed.
|
|
NLMISC_COMMAND(square,"display the square of the parameter","<value>")
|
|
{
|
|
// this code will be executed when the user will call this command.
|
|
// you have access to some variables:
|
|
// - args is a vector of strings. they are the user parameters, you have to
|
|
// check if enough parameters are present and if they are in a good
|
|
// format.
|
|
// - log is a CLog object that is used to display the result of the command,
|
|
// if any. see the log example to know how to use CLog.
|
|
|
|
// this function must return true if the command successfully executed
|
|
// or false is something wrong happens. for example, if there are not enough
|
|
// parameters, return false.
|
|
|
|
// check args, if there is not the right number of parameters, return bad status.
|
|
if (args.size() != 1) return false;
|
|
|
|
uint32 val = atoi(args[0].c_str());
|
|
|
|
// display the result.
|
|
log.displayNL("The square of %d is %d", val, val*val);
|
|
|
|
// return ok status.
|
|
return true;
|
|
}
|
|
|
|
//
|
|
// Dummy variables
|
|
//
|
|
|
|
bool MyVar1;
|
|
uint8 MyVar2;
|
|
sint8 MyVar3;
|
|
uint16 MyVar4;
|
|
sint16 MyVar5;
|
|
uint32 MyVar6;
|
|
sint32 MyVar7;
|
|
uint64 MyVar8;
|
|
sint64 MyVar9;
|
|
std::string MyVar10;
|
|
ucchar MyVar13;
|
|
float MyVar14;
|
|
double MyVar15;
|
|
|
|
//
|
|
// Create commands on all variables
|
|
//
|
|
|
|
// with this macro, you can get or set the variable in real time.
|
|
// this is the easiest way to set or get a variable in real time. you have a direct
|
|
// access to the variable so you can use this macro.
|
|
// first param is the type of the variable. second one is the variable name,
|
|
// and the third one is an help string that describes what the variable does.
|
|
// when the program is executed, you can type the variable name with no parameter
|
|
// to see the value of the variable or type the variable name with one parameter
|
|
// (the value you want to set) to change the variable contents.
|
|
NLMISC_VARIABLE(bool, MyVar1, "a dummy variable");
|
|
NLMISC_VARIABLE(uint8, MyVar2, "a dummy variable");
|
|
NLMISC_VARIABLE(sint8, MyVar3, "a dummy variable");
|
|
NLMISC_VARIABLE(uint16, MyVar4, "a dummy variable");
|
|
NLMISC_VARIABLE(sint16, MyVar5, "a dummy variable");
|
|
NLMISC_VARIABLE(uint32, MyVar6, "a dummy variable");
|
|
NLMISC_VARIABLE(sint32, MyVar7, "a dummy variable");
|
|
NLMISC_VARIABLE(uint64, MyVar8, "a dummy variable");
|
|
NLMISC_VARIABLE(sint64, MyVar9, "a dummy variable");
|
|
NLMISC_VARIABLE(std::string, MyVar10, "a dummy variable");
|
|
NLMISC_VARIABLE(ucchar, MyVar13, "a dummy variable");
|
|
NLMISC_VARIABLE(float, MyVar14, "a dummy variable");
|
|
NLMISC_VARIABLE(double, MyVar15, "a dummy variable");
|
|
|
|
//
|
|
// DynVariable
|
|
//
|
|
|
|
class CDynVar
|
|
{
|
|
private:
|
|
int _PrivateVar;
|
|
public:
|
|
int get() { return _PrivateVar; }
|
|
void set(int val) { _PrivateVar = val; }
|
|
};
|
|
|
|
CDynVar dv;
|
|
|
|
// with this macro, you can get or set the variable in real time.
|
|
// this is an example of dynamic variable. the goal of this macro is to provide an
|
|
// easy way to get or set a variable when you don't have a direct access on this variable.
|
|
// first param is the type of the variable. second one is the name of the variable.
|
|
// the third one is the help string about this variable (what this variable does).
|
|
// when the program is executed, you can type the variable name with no parameter
|
|
// to see the value of the variable or type the variable name with one parameter
|
|
// (the value you want to set) to change the variable contents.
|
|
NLMISC_DYNVARIABLE(int,PrivVar,"dummy variable")
|
|
{
|
|
// this code will be executed to get or set the variable.
|
|
// you have to provide a way to do that.
|
|
// the 'get' boolean says if you have to get or set the variable.
|
|
// the 'pointer' is a pointer on the variable you have to read or write.
|
|
// if 'get' is true, you have to set '*pointer' with the value of your variable.
|
|
// if 'get' is false, you have to set your variable with the value of *pointer
|
|
if (get)
|
|
*pointer = dv.get();
|
|
else
|
|
dv.set(*pointer);
|
|
}
|
|
|
|
|
|
//
|
|
// Main
|
|
//
|
|
|
|
// look at the log sample
|
|
NLMISC::CLog mylog;
|
|
// look at the log sample
|
|
NLMISC::CStdDisplayer mysd;
|
|
|
|
int main (int argc, char **argv)
|
|
{
|
|
// look at the debug sample
|
|
NLMISC::createDebug();
|
|
|
|
// look at the log sample
|
|
mylog.addDisplayer(&mysd);
|
|
|
|
printf("Type a command, 'help' or 'quit'\n");
|
|
|
|
while (true)
|
|
{
|
|
// display prompt
|
|
std::cout << "> ";
|
|
fflush(stdout);
|
|
|
|
// get command line
|
|
std::string commandLine;
|
|
std::getline(std::cin, commandLine, '\n');
|
|
|
|
if (commandLine == "quit")
|
|
break;
|
|
|
|
// execute the command line. it will try to find the command or the
|
|
// variable and call the associated code
|
|
NLMISC::ICommand::execute(commandLine, mylog);
|
|
}
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|