X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fcore%2Futil%2FCommandLine.cpp;h=85d171d7d93784b28bfa2ec580ca5e49ec9ba065;hb=5fbd0ffbe9826876b95adc316c84557009428384;hp=74c34e1461cde32c1cd9d8f0263c217577203ae0;hpb=2032c82d206dd40e35d118242272417431094823;p=anna.git diff --git a/source/core/util/CommandLine.cpp b/source/core/util/CommandLine.cpp index 74c34e1..85d171d 100644 --- a/source/core/util/CommandLine.cpp +++ b/source/core/util/CommandLine.cpp @@ -1,37 +1,9 @@ -// ANNA - Anna is Not Nothingness Anymore -// -// (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo -// -// http://redmine.teslayout.com/projects/anna-suite -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of the copyright holder nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: eduardo.ramos.testillano@gmail.com -// cisco.tierra@gmail.com +// ANNA - Anna is Not Nothingness Anymore // +// // +// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo // +// // +// See project site at http://redmine.teslayout.com/projects/anna-suite // +// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE // #include @@ -89,6 +61,17 @@ throw() { a_arguments.push_back(new Variable(arg1, arg2, type, comment, needValue)); } +void CommandLine::initialize(const char** argv, const int argc, int positionalArguments) +throw(RuntimeException) { + if (argc < 1) throw RuntimeException("Provided argc < 1 as command-line argv size !", ANNA_FILE_LOCATION); + if (positionalArguments < 0) throw RuntimeException("Provided negative number of positional arguments as command-line initializer", ANNA_FILE_LOCATION); + if (positionalArguments > (argc-1)) throw RuntimeException("Provided positional arguments > (argc - 1) as command-line initializer", ANNA_FILE_LOCATION); + a_positionalArguments = positionalArguments; + a_argv = argv; + a_argc = argc; + a_wasParsed = false; +} + //-------------------------------------------------------------------------------- // Verifica que todos los argumentos declarados como obligatorios estan en la // linea de comandos. @@ -189,7 +172,7 @@ bool CommandLine::analize() throw() { Variable* variable; bool result = true; - int i = 1; + int i = a_positionalArguments + 1; string aux; if(a_wasParsed == true) // already analyzed @@ -285,7 +268,7 @@ throw() { void CommandLine::printUsage() const throw() { int i, maxi(a_arguments.size()); - cout << "Use: " << a_argv [0] << " "; + cout << "Usage: " << a_argv [0] << " "; for(i = 0; i < maxi; i ++) cout << a_arguments [i]->asString() << " "; @@ -315,6 +298,9 @@ throw() { vector ::const_iterator ii, maxii; const char *value; + for(int pos = 1; pos <= a_positionalArguments; pos++) + result += anna::functions::asString("Positional argument [%d]: %s\n", pos, getPositional(pos)); + for(ii = a_arguments.begin(), maxii = a_arguments.end(); ii != maxii; ii ++) { value = (*ii)->getValue(); @@ -334,6 +320,9 @@ xml::Node* CommandLine::asXML(xml::Node* parent) const throw() { vector ::const_iterator ii, maxii; const char *value; + for(int pos = 1; pos <= a_positionalArguments; pos++) + result->createAttribute(anna::functions::asString("PositionalArgument_%d", pos).c_str(), getPositional(pos)); + for(ii = a_arguments.begin(), maxii = a_arguments.end(); ii != maxii; ii ++) { value = (*ii)->getValue();