📄 advconsole.cpp
字号:
/*
This "SOFTWARE" is a free software.
You are allowed to download, use, modify and redistribute this software.
The software is provided "AS IS" without warranty of any kind.
Copyright: University of Koblenz-Landau
*/
/***********************************************
Advanced Tools Version 1.0
Copyright 2002, Patrick Sturm
************************************************/
#include <advconsole.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
advConsoleParameters::advConsoleParameters(const string& initProgramName)
{
programName=initProgramName;
}
void advConsoleParameters::addOptionSwitch(const string& name, const string& help)
{
helpStr[name]=help;
optionSwitchValues[name]=false;
}
void advConsoleParameters::addOptionProperty(const std::string& shortName, const std::string& fullName, const std::string& defaultValue, const std::string& help)
{
if (shortName!="") optionFullnames[shortName]=fullName;
helpStr[fullName]=help;
helpStr[shortName]=help;
optionPropertyValues[fullName]=defaultValue;
}
void advConsoleParameters::addObligatoryParameter(const string& name, const string& help)
{
obligatoryParameters.push_back(name);
obligatoryParameterValues.push_back(name);
helpStr[name]=help;
}
std::string advConsoleParameters::GetHelp()
{
std::string rvalue = "\n<<<<<<<<<< Help for " + programName + " >>>>>>>>>>\n\n";
rvalue = rvalue + "Usage: \"" + programName + " ";
int i;
rvalue = rvalue + "[ ";
for (std::map<std::string, std::string>::iterator itt = optionFullnames.begin(); itt != optionFullnames.end(); ++itt)
rvalue = rvalue + itt->first + " ";// + optionPropertyValues[itt->second] + " ";
rvalue = rvalue + "] ";
for (i = 0; i < obligatoryParameters.size(); i++)
rvalue = rvalue + obligatoryParameters[i] + " ";
rvalue = rvalue + "\"\n\n";
if (obligatoryParameters.size()) rvalue = rvalue + "mandatory parameters:" + "\n";
for (i = 0; i < obligatoryParameters.size(); i++)
rvalue = rvalue + obligatoryParameters[i] + " : " + GetHelp(obligatoryParameters[i]) + "\n";
if (optionFullnames.size()) rvalue = rvalue + "optional parameters:" + "\n";
for (std::map<std::string, std::string>::iterator it = optionFullnames.begin(); it != optionFullnames.end(); ++it)
rvalue = rvalue + it->first + " : " + GetHelp(it->first) + "\n";
if (optionSwitchValues.size()) rvalue = rvalue + "switches (boolean options):" + "\n";
for (std::map<std::string, bool>::iterator itb = optionSwitchValues.begin(); itb != optionSwitchValues.end(); ++itb)
rvalue = rvalue + itb->first + " : " + GetHelp(itb->first);
rvalue = rvalue + "\n\n<<<<<<<<<< End of Help >>>>>>>>>>\n";
// optionFullnames
// optionSwitchValues
return rvalue;
}
bool advConsoleParameters::checkParameter(const string& name, const string& value)
{
return true;
}
void advConsoleParameters::parseError(const string& message)
{
cerr << message.c_str() << endl;
exit(1);
}
#include <stdio.h>
int advConsoleParameters::parseCommandLine(int argc, const char* argv[])
{
int i=0;
// Start to read options
while (i<argc)
{
if (optionSwitchValues.find(argv[i])!=optionSwitchValues.end())
{
optionSwitchValues[argv[i]]=true;
i++;
}
else if (optionFullnames.find(argv[i])!=optionFullnames.end())
{
if (i+1>=argc)
parseError("Error: Too less parameters...");
else if (!checkParameter(optionFullnames[argv[i]],argv[i+1]))
parseError("Error: Parameter '"+string(argv[i+1])+"' is unknown...");
else
{
optionPropertyValues[optionFullnames[argv[i]]]=argv[i+1];
i++;
}
i++;
}
else
{
string property = argv[i];
string::size_type firstPosition = property.find_first_of("=");
if (firstPosition!=string::npos)
{
string key=property.substr(0,firstPosition);
if (optionPropertyValues.find(key)!=optionPropertyValues.end())
{
string value=property.substr(firstPosition+1,property.length());
if (!checkParameter(key,value))
parseError("Error: Parameter '"+value+"' is unknown...");
else optionPropertyValues[key]=value;
i++;
}
else break;
}
else break;
}
}
int paramNr = 0;
while (i<argc && paramNr<obligatoryParameters.size())
{
if (checkParameter(obligatoryParameters[paramNr],argv[i]))
{
obligatoryParameterValues[paramNr]=argv[i];
paramNr++;
}
else parseError("Error: Parameter '"+string(argv[i])+"' is unknown...");
i++;
}
if (i<argc) parseError("Error: Unknown parameter '"+string(argv[i])+"'...");
return (argc-i);
}
const string& advConsoleParameters::getOptionProperty(const string& name)
{
return optionPropertyValues[name];
}
const string& advConsoleParameters::getObligatoryParameter(const string& name)
{
static string emptyString;
int i=0;
while (i<obligatoryParameters.size() && obligatoryParameters[i]!=name) i++;
if (i<obligatoryParameters.size())
return obligatoryParameterValues[i];
return emptyString;
}
bool advConsoleParameters::isSwitchEnabled(const string& name)
{
return optionSwitchValues[name];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -