diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/cmd/cmd.c | 2 | ||||
| -rw-r--r-- | src/base/cmd/cmd.h | 2 | ||||
| -rw-r--r-- | src/base/cmd/cmdHist.c | 13 | 
3 files changed, 12 insertions, 5 deletions
diff --git a/src/base/cmd/cmd.c b/src/base/cmd/cmd.c index e594c65a..8c40e71e 100644 --- a/src/base/cmd/cmd.c +++ b/src/base/cmd/cmd.c @@ -125,7 +125,7 @@ void Cmd_End( Abc_Frame_t * pAbc )      st_generator * gen;      char * pKey, * pValue;  #if defined(WIN32)  -    Cmd_HistoryWrite( pAbc ); +    Cmd_HistoryWrite( pAbc, ABC_INFINITY );  #endif  //    st_free_table( pAbc->tCommands, (void (*)()) 0, CmdCommandFree ); diff --git a/src/base/cmd/cmd.h b/src/base/cmd/cmd.h index 4cf85a5c..fc16581f 100644 --- a/src/base/cmd/cmd.h +++ b/src/base/cmd/cmd.h @@ -61,7 +61,7 @@ extern void        Cmd_FlagUpdateValue( Abc_Frame_t * pAbc, const char * key, ch  /*=== cmdHist.c ========================================================*/  extern void          Cmd_HistoryAddCommand( Abc_Frame_t * pAbc, const char * command );  extern void        Cmd_HistoryRead( Abc_Frame_t * p ); -extern void        Cmd_HistoryWrite( Abc_Frame_t * p ); +extern void        Cmd_HistoryWrite( Abc_Frame_t * p, int Limit );  /*=== cmdLoad.c ========================================================*/  extern int         CmdCommandLoad( Abc_Frame_t * pAbc, int argc, char ** argv ); diff --git a/src/base/cmd/cmdHist.c b/src/base/cmd/cmdHist.c index 7222d2c5..359646a6 100644 --- a/src/base/cmd/cmdHist.c +++ b/src/base/cmd/cmdHist.c @@ -47,6 +47,9 @@ ABC_NAMESPACE_IMPL_START  ***********************************************************************/  void Cmd_HistoryAddCommand(    Abc_Frame_t * p, const char * command )  { +    int nLastLooked = 10;   // defines how many entries back are looked +    int nLastSaved  = 100;  // defines how many last entries are saved +      char Buffer[ABC_MAX_STR];      int Len = strlen(command);      strcpy( Buffer, command ); @@ -60,11 +63,14 @@ void Cmd_HistoryAddCommand(    Abc_Frame_t * p, const char * command )          char * pStr;          int i;          // do not enter if the same command appears among the last five commands -        Vec_PtrForEachEntryStart( char *, p->aHistory, pStr, i, Abc_MaxInt(0, Vec_PtrSize(p->aHistory)-5) ) +        Vec_PtrForEachEntryStart( char *, p->aHistory, pStr, i, Abc_MaxInt(0, Vec_PtrSize(p->aHistory)-nLastLooked) )              if ( !strcmp(pStr, Buffer) )                  break;          if ( i == Vec_PtrSize(p->aHistory) ) +        {              Vec_PtrPush( p->aHistory, Extra_UtilStrsav(Buffer) ); +            Cmd_HistoryWrite( p, nLastSaved ); +        }      }  } @@ -111,7 +117,7 @@ void Cmd_HistoryRead( Abc_Frame_t * p )    SeeAlso     []  ***********************************************************************/ -void Cmd_HistoryWrite( Abc_Frame_t * p ) +void Cmd_HistoryWrite( Abc_Frame_t * p, int Limit )  {      FILE * pFile;      char * pStr;  @@ -122,7 +128,8 @@ void Cmd_HistoryWrite( Abc_Frame_t * p )          Abc_Print( 0, "Cannot open file \"abc.history\" for writing.\n" );          return;      } -    Vec_PtrForEachEntry( char *, p->aHistory, pStr, i ) +    Limit = Abc_MaxInt( 0, Vec_PtrSize(p->aHistory)-Limit ); +    Vec_PtrForEachEntryStart( char *, p->aHistory, pStr, i, Limit )          fprintf( pFile, "%s\n", pStr );      fclose( pFile );  }  | 
