EgtGeneral 1.5e1 :
- in CmdParser aggiunta gestione DirReplace - in Scanner se RemInit è nullptr non si gestiscono i commenti.
This commit is contained in:
+106
-30
@@ -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 ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user