Commit 6244ac6f authored by Andy Cedilnik's avatar Andy Cedilnik
Browse files

Add a way to convert ascii to string

parent c8e546a3
...@@ -34,12 +34,48 @@ bool cmStringCommand::InitialPass(std::vector<std::string> const& args) ...@@ -34,12 +34,48 @@ bool cmStringCommand::InitialPass(std::vector<std::string> const& args)
{ {
return this->HandleCompareCommand(args); return this->HandleCompareCommand(args);
} }
else if(subCommand == "ASCII")
{
return this->HandleAsciiCommand(args);
}
std::string e = "does not recognize sub-command "+subCommand; std::string e = "does not recognize sub-command "+subCommand;
this->SetError(e.c_str()); this->SetError(e.c_str());
return false; return false;
} }
//----------------------------------------------------------------------------
bool cmStringCommand::HandleAsciiCommand(std::vector<std::string> const& args)
{
if ( args.size() <= 1 )
{
this->SetError("No output variable specified");
return false;
}
std::string::size_type cc;
std::string outvar = args[args.size()-1];
std::string output = "";
for ( cc = 1; cc < args.size()-1; cc ++ )
{
int ch = atoi(args[cc].c_str());
if ( ch > 0 && ch < 256 )
{
output += static_cast<char>(ch);
}
else
{
std::string error = "Character with code ";
error += ch;
error += " does not exist.";
this->SetError(error.c_str());
return false;
}
}
// Store the output in the provided variable.
m_Makefile->AddDefinition(outvar.c_str(), output.c_str());
return true;
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
bool cmStringCommand::HandleRegexCommand(std::vector<std::string> const& args) bool cmStringCommand::HandleRegexCommand(std::vector<std::string> const& args)
{ {
......
...@@ -67,16 +67,19 @@ public: ...@@ -67,16 +67,19 @@ public:
"STRING(COMPARE NOTEQUAL <string1> <string2> <output variable>)\n" "STRING(COMPARE NOTEQUAL <string1> <string2> <output variable>)\n"
"STRING(COMPARE LESS <string1> <string2> <output variable>)\n" "STRING(COMPARE LESS <string1> <string2> <output variable>)\n"
"STRING(COMPARE GREATER <string1> <string2> <output variable>)\n" "STRING(COMPARE GREATER <string1> <string2> <output variable>)\n"
"STRING(ASCII <number> [<number> ...] <output variable>)\n"
"REGEX MATCH will match the regular expression once and store the match in the output variable.\n" "REGEX MATCH will match the regular expression once and store the match in the output variable.\n"
"REGEX MATCHALL will match the regular expression as many times as possible and store the matches\n" "REGEX MATCHALL will match the regular expression as many times as possible and store the matches\n"
" in the output variable as a list.\n" " in the output variable as a list.\n"
"REGEX REPLACE will match the regular expression as many times as possible and substitute the\n" "REGEX REPLACE will match the regular expression as many times as possible and substitute the\n"
" replacement expression for the match in the output.\n" " replacement expression for the match in the output.\n"
"COMPARE EQUAL/NOTEQUAL/LESS/GREATER will compare the strings and store true or false in the output variable.\n"; "COMPARE EQUAL/NOTEQUAL/LESS/GREATER will compare the strings and store true or false in the output variable.\n"
"ASCII will convert all numbers into corresponding ASCII characters.\n";
} }
cmTypeMacro(cmStringCommand, cmCommand); cmTypeMacro(cmStringCommand, cmCommand);
protected: protected:
bool HandleAsciiCommand(std::vector<std::string> const& args);
bool HandleRegexCommand(std::vector<std::string> const& args); bool HandleRegexCommand(std::vector<std::string> const& args);
bool RegexMatch(std::vector<std::string> const& args); bool RegexMatch(std::vector<std::string> const& args);
bool RegexMatchAll(std::vector<std::string> const& args); bool RegexMatchAll(std::vector<std::string> const& args);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment