EgtGeneral 1.5e1 :

- in CmdParser aggiunta gestione DirReplace
- in Scanner se RemInit è nullptr non si gestiscono i commenti.
This commit is contained in:
Dario Sassi
2014-05-12 08:55:50 +00:00
parent 8dfee2b65d
commit f988de2250
4 changed files with 119 additions and 34 deletions
+106 -30
View File
@@ -1,13 +1,13 @@
//----------------------------------------------------------------------------
// EgalTech 2013-2013
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : CmdParser.cpp Data : 25.11.13 Versione : 1.3a1
// File : CmdParser.cpp Data : 10.05.15 Versione : 1.5e1
// Contenuto : Implementazione della classe CCmdParser.
//
//
//
// Modifiche : 19.01.13 DS Creazione modulo.
//
// 10.05.14 DS Modif. per DirReplace.
//
//----------------------------------------------------------------------------
@@ -40,6 +40,7 @@ CmdParser::CmdParser( void)
m_ExecMgr.Insert( "COUNTER", &CmdParser::ExecuteCounter) ;
m_ExecMgr.Insert( "DIR", &CmdParser::ExecuteDir) ;
m_ExecMgr.Insert( "FILE", &CmdParser::ExecuteFile) ;
m_ExecMgr.Insert( "DIRREPLACE", &CmdParser::ExecuteDirReplace) ;
m_ExecMgr.Insert( "PAUSE", &CmdParser::ExecutePause) ;
m_ExecMgr.Insert( "RESET", &CmdParser::ExecuteReset) ;
m_ExecMgr.Insert( "RUN", &CmdParser::ExecuteRun) ;
@@ -102,7 +103,7 @@ CmdParser::Init( void)
//----------------------------------------------------------------------------
bool
CmdParser::Run( const std::string& sCmdFile, bool bIsolated)
CmdParser::Run( const string& sCmdFile, bool bIsolated)
{
bool bOk ;
string sOut ;
@@ -207,14 +208,14 @@ CmdParser::ExecLine( const string& sCmdLine, bool bIsolated)
//----------------------------------------------------------------------------
bool
CmdParser::AddVariable( const std::string& sName, int nVal)
CmdParser::AddVariable( const string& sName, int nVal)
{
return ( m_NameMap.insert( NameMap::value_type( sName, nVal)).second) ;
}
//----------------------------------------------------------------------------
bool
CmdParser::SetVariable( const std::string& sName, int nVal)
CmdParser::SetVariable( const string& sName, int nVal)
{
NameMap::iterator Iter ;
Iter = m_NameMap.find( sName) ;
@@ -228,7 +229,7 @@ CmdParser::SetVariable( const std::string& sName, int nVal)
//----------------------------------------------------------------------------
bool
CmdParser::GetVariable( const std::string& sName, int& nVal)
CmdParser::GetVariable( const string& sName, int& nVal)
{
NameMap::const_iterator Iter ;
Iter = m_NameMap.find( sName) ;
@@ -242,7 +243,7 @@ CmdParser::GetVariable( const std::string& sName, int& nVal)
//----------------------------------------------------------------------------
bool
CmdParser::RemoveVariable( const std::string& sName)
CmdParser::RemoveVariable( const string& sName)
{
return ( m_NameMap.erase( sName) > 0) ;
}
@@ -264,9 +265,53 @@ CmdParser::ResetAllVariables( void)
return true ;
}
//----------------------------------------------------------------------------
void
CmdParser::ResetDirReplace( void)
{
m_DirReplace.clear() ;
}
//----------------------------------------------------------------------------
bool
CmdParser::SetDirReplace( const string& sToken, const string& sReplace)
{
// se il token è già presente, ne aggiorno la stringa di replace
for ( size_t i = 0 ; i < m_DirReplace.size() ; ++i) {
if ( m_DirReplace[i].first == sToken) {
m_DirReplace[i].second = sReplace ;
return true ;
}
}
// altrimenti lo aggiungo in coda
try { m_DirReplace.push_back( make_pair( sToken, sReplace)) ; }
catch (...) { return false ; }
return true ;
}
//----------------------------------------------------------------------------
int
CmdParser::GetIdParam( const std::string& sParam, bool bNewAllowed)
CmdParser::DirReplace( string& sPath)
{
int nRep = 0 ;
for ( size_t i = 0 ; i < m_DirReplace.size() ; ++i)
nRep += ReplaceString( sPath, m_DirReplace[i].first, m_DirReplace[i].second) ;
return nRep ;
}
//----------------------------------------------------------------------------
int
CmdParser::DirInvReplace( string& sPath)
{
int nRep = 0 ;
for ( size_t i = 0 ; i < m_DirReplace.size() ; ++i)
nRep += ReplaceString( sPath, m_DirReplace[i].second, m_DirReplace[i].first) ;
return nRep ;
}
//----------------------------------------------------------------------------
int
CmdParser::GetIdParam( const string& sParam, bool bNewAllowed)
{
int nVal ;
// se nome di identificatore numerico
@@ -291,12 +336,10 @@ CmdParser::GetIdParam( const std::string& sParam, bool bNewAllowed)
}
//----------------------------------------------------------------------------
const string
string
CmdParser::GetInitSpaces( void)
{
string sIni ;
for ( int i = 0 ; i < m_nLev ; ++ i)
sIni += " " ;
@@ -376,14 +419,14 @@ CmdParser::ExecuteDir( const string& sCmd2, const STRVECTOR& vsParams)
{
// analisi ed esecuzione dei comandi
if ( sCmd2 == "EMPTY") {
// 1 parametro : nome direttorio da svuotare
if ( vsParams.size() != 1)
return false ;
// eventuale conversione di token nel nome direttorio
string sDir = vsParams[0] ;
DirReplace( sDir) ;
// svuoto il direttorio
EmptyDirectory( vsParams[0]) ;
EmptyDirectory( sDir) ;
return true ;
}
@@ -440,42 +483,73 @@ CmdParser::ExecuteFile( const string& sCmd2, const STRVECTOR& vsParams)
// 1 parametro : file
if ( vsParams.size() != 1)
return false ;
// eventuale conversione di token nel nome file
string sFile = vsParams[0] ;
DirReplace( sFile) ;
// eseguo la cancellazione
EraseFile( vsParams[0]) ;
EraseFile( sFile) ;
return true ;
}
// confronto tra file di testo
else if ( sCmd2 == "CMP") {
// 4 parametri : file1, file2, inizio commento, file diff
if ( vsParams.size() != 4)
return false ;
// eventuale conversione di token nei nomi file
string sFile1 = vsParams[0] ;
DirReplace( sFile1) ;
string sFile2 = vsParams[1] ;
DirReplace( sFile2) ;
string sFileDiff = vsParams[3] ;
DirReplace( sFileDiff) ;
// eseguo il confronto
TextFileCompare( vsParams[0], vsParams[1], vsParams[2], vsParams[3]) ;
TextFileCompare( sFile1, sFile2, vsParams[2], sFileDiff) ;
return true ;
}
// confronto tra file binari
else if ( sCmd2 == "BINCMP") {
// 3 parametri : file1, file2, file diff
if ( vsParams.size() != 3)
return false ;
// eventuale conversione di token nei nomi file
string sFile1 = vsParams[0] ;
DirReplace( sFile1) ;
string sFile2 = vsParams[1] ;
DirReplace( sFile2) ;
string sFileDiff = vsParams[2] ;
DirReplace( sFileDiff) ;
// eseguo il confronto
BinaryFileCompare( vsParams[0], vsParams[1], vsParams[2]) ;
BinaryFileCompare( sFile1, sFile2, sFileDiff) ;
return true ;
}
return false ;
}
//----------------------------------------------------------------------------
bool
CmdParser::ExecuteDirReplace( const string& sCmd2, const STRVECTOR& vsParams)
{
if ( sCmd2 == "SET") {
// 2 parametri : sToken, sReplace
if ( vsParams.size() != 2)
return false ;
// eseguo
return SetDirReplace( vsParams[0], vsParams[1]) ;
}
else if ( sCmd2 == "RESET") {
// 0 parametri
if ( vsParams.size() != 0)
return false ;
// eseguo
ResetDirReplace() ;
return true ;
}
return false ;
}
//----------------------------------------------------------------------------
bool
CmdParser::ExecutePause( const string& sCmd2, const STRVECTOR& vsParams)
@@ -483,7 +557,6 @@ CmdParser::ExecutePause( const string& sCmd2, const STRVECTOR& vsParams)
if ( sCmd2.empty()) {
const int MIN_TIME = 0 ;
const int MAX_TIME = 10000 ;
// 1 parametro : durata della pausa in ms
if ( vsParams.size() != 1)
return false ;
@@ -539,6 +612,9 @@ CmdParser::ExecuteRun( const string& sCmd2, const STRVECTOR& vsParams)
// almeno 1 parametro : nome file di script da eseguire
if ( vsParams.size() < 1)
return false ;
// eventuale conversione di token nel nome file
string sFile = vsParams[0] ;
DirReplace( sFile) ;
// se esiste 2° parametro è flag di ignora errori
bool bSkipErrors = false ;
if ( vsParams.size() >= 2)
@@ -548,7 +624,7 @@ CmdParser::ExecuteRun( const string& sCmd2, const STRVECTOR& vsParams)
return false ;
// esecuzione comando
++ m_nLev ;
bool bOk = Run( vsParams[0]) ;
bool bOk = Run( sFile) ;
-- m_nLev ;
return ( bOk || bSkipErrors) ;
}
@@ -580,7 +656,7 @@ CmdParser::ExecuteSet( const string& sCmd2, const STRVECTOR& vsParams)
//----------------------------------------------------------------------------
bool
CmdParser::GetNamesParam( const std::string& sParam, STRVECTOR& vsNames)
CmdParser::GetNamesParam( const string& sParam, STRVECTOR& vsNames)
{
STRVECTOR::iterator Iter ;