From aa62165a1cbd40740eb4ef5237d3a2259c40fb1d Mon Sep 17 00:00:00 2001 From: Baruch Sterin Date: Thu, 5 Nov 2015 01:24:26 -0800 Subject: main: allow the -c -C -q -f -F -s command line options to be repeated and the commands they sepcify be executed in order instead of overriding each other --- src/base/main/mainReal.c | 52 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/src/base/main/mainReal.c b/src/base/main/mainReal.c index abe1f453..a22a871a 100644 --- a/src/base/main/mainReal.c +++ b/src/base/main/mainReal.c @@ -81,7 +81,8 @@ static int TypeCheck( Abc_Frame_t * pAbc, const char * s); int Abc_RealMain( int argc, char * argv[] ) { Abc_Frame_t * pAbc; - char sCommandUsr[ABC_MAX_STR] = {0}, sCommandTmp[ABC_MAX_STR], sReadCmd[1000], sWriteCmd[1000]; + Vec_Str_t* sCommandUsr = Vec_StrAlloc(1000); + char sCommandTmp[ABC_MAX_STR], sReadCmd[1000], sWriteCmd[1000]; const char * sOutFile, * sInFile; char * sCommand; int fStatus = 0; @@ -143,32 +144,56 @@ int Abc_RealMain( int argc, char * argv[] ) while ((c = Extra_UtilGetopt(argc, argv, "c:q:C:S:hf:F:o:st:T:xb")) != EOF) { switch(c) { case 'c': - strcpy( sCommandUsr, globalUtilOptarg ); + if( Vec_StrSize(sCommandUsr) > 0 ) + { + Vec_StrAppend(sCommandUsr, " ; "); + } + Vec_StrAppend(sCommandUsr, globalUtilOptarg ); fBatch = BATCH; break; case 'q': - strcpy( sCommandUsr, globalUtilOptarg ); + if( Vec_StrSize(sCommandUsr) > 0 ) + { + Vec_StrAppend(sCommandUsr, " ; "); + } + Vec_StrAppend(sCommandUsr, globalUtilOptarg ); fBatch = BATCH_QUIET; break; case 'C': - strcpy( sCommandUsr, globalUtilOptarg ); + if( Vec_StrSize(sCommandUsr) > 0 ) + { + Vec_StrAppend(sCommandUsr, " ; "); + } + Vec_StrAppend(sCommandUsr, globalUtilOptarg ); fBatch = BATCH_THEN_INTERACTIVE; break; case 'S': - strcpy( sCommandUsr, globalUtilOptarg ); + if( Vec_StrSize(sCommandUsr) > 0 ) + { + Vec_StrAppend(sCommandUsr, " ; "); + } + Vec_StrAppend(sCommandUsr, globalUtilOptarg ); fBatch = BATCH_SMT; break; case 'f': - sprintf(sCommandUsr, "source %s", globalUtilOptarg); + if( Vec_StrSize(sCommandUsr) > 0 ) + { + Vec_StrAppend(sCommandUsr, " ; "); + } + Vec_StrPrintF(sCommandUsr, "source %s", globalUtilOptarg ); fBatch = BATCH; break; case 'F': - sprintf(sCommandUsr, "source -x %s", globalUtilOptarg); + if( Vec_StrSize(sCommandUsr) > 0 ) + { + Vec_StrAppend(sCommandUsr, " ; "); + } + Vec_StrPrintF(sCommandUsr, "source -x %s", globalUtilOptarg ); fBatch = BATCH; break; @@ -230,9 +255,11 @@ int Abc_RealMain( int argc, char * argv[] ) } } + Vec_StrPush(sCommandUsr, '\0'); + if ( fBatch == BATCH_SMT ) { - Wlc_StdinProcessSmt( pAbc, sCommandUsr ); + Wlc_StdinProcessSmt( pAbc, Vec_StrArray(sCommandUsr) ); Abc_Stop(); return 0; } @@ -242,8 +269,8 @@ int Abc_RealMain( int argc, char * argv[] ) extern Gia_Man_t * Gia_ManFromBridge( FILE * pFile, Vec_Int_t ** pvInit ); pAbc->pGia = Gia_ManFromBridge( stdin, NULL ); } - else if ( fBatch!=INTERACTIVE && fBatch!=BATCH_QUIET && sCommandUsr[0] ) - Abc_Print( 1, "ABC command line: \"%s\".\n\n", sCommandUsr ); + else if ( fBatch!=INTERACTIVE && fBatch!=BATCH_QUIET && Vec_StrSize(sCommandUsr)>0 ) + Abc_Print( 1, "ABC command line: \"%s\".\n\n", Vec_StrArray(sCommandUsr) ); if ( fBatch!=INTERACTIVE ) { @@ -280,7 +307,7 @@ int Abc_RealMain( int argc, char * argv[] ) if ( fStatus == 0 ) { /* cmd line contains `source ' */ - fStatus = Cmd_CommandExecute( pAbc, sCommandUsr ); + fStatus = Cmd_CommandExecute( pAbc, Vec_StrArray(sCommandUsr) ); if ( (fStatus == 0 || fStatus == -1) && fFinalWrite && sOutFile ) { sprintf( sCommandTmp, "%s %s", sWriteCmd, sOutFile ); @@ -292,9 +319,10 @@ int Abc_RealMain( int argc, char * argv[] ) fBatch = INTERACTIVE; pAbc->fBatchMode = 0; } - } + Vec_StrFreeP(&sCommandUsr); + if ( fBatch==INTERACTIVE ) { // start interactive mode -- cgit v1.2.3