Commit 2a7a06b6 by Alan Mishchenko

Added recording history of used commands into file 'abc.history' (Windows only).

parent 49c57999
...@@ -125,7 +125,7 @@ void Cmd_End( Abc_Frame_t * pAbc ) ...@@ -125,7 +125,7 @@ void Cmd_End( Abc_Frame_t * pAbc )
st_generator * gen; st_generator * gen;
char * pKey, * pValue; char * pKey, * pValue;
#if defined(WIN32) #if defined(WIN32)
Cmd_HistoryWrite( pAbc ); Cmd_HistoryWrite( pAbc, ABC_INFINITY );
#endif #endif
// st_free_table( pAbc->tCommands, (void (*)()) 0, CmdCommandFree ); // st_free_table( pAbc->tCommands, (void (*)()) 0, CmdCommandFree );
......
...@@ -61,7 +61,7 @@ extern void Cmd_FlagUpdateValue( Abc_Frame_t * pAbc, const char * key, ch ...@@ -61,7 +61,7 @@ extern void Cmd_FlagUpdateValue( Abc_Frame_t * pAbc, const char * key, ch
/*=== cmdHist.c ========================================================*/ /*=== cmdHist.c ========================================================*/
extern void Cmd_HistoryAddCommand( Abc_Frame_t * pAbc, const char * command ); extern void Cmd_HistoryAddCommand( Abc_Frame_t * pAbc, const char * command );
extern void Cmd_HistoryRead( Abc_Frame_t * p ); 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 ========================================================*/ /*=== cmdLoad.c ========================================================*/
extern int CmdCommandLoad( Abc_Frame_t * pAbc, int argc, char ** argv ); extern int CmdCommandLoad( Abc_Frame_t * pAbc, int argc, char ** argv );
......
...@@ -47,6 +47,9 @@ ABC_NAMESPACE_IMPL_START ...@@ -47,6 +47,9 @@ ABC_NAMESPACE_IMPL_START
***********************************************************************/ ***********************************************************************/
void Cmd_HistoryAddCommand( Abc_Frame_t * p, const char * command ) 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]; char Buffer[ABC_MAX_STR];
int Len = strlen(command); int Len = strlen(command);
strcpy( Buffer, command ); strcpy( Buffer, command );
...@@ -60,11 +63,14 @@ void Cmd_HistoryAddCommand( Abc_Frame_t * p, const char * command ) ...@@ -60,11 +63,14 @@ void Cmd_HistoryAddCommand( Abc_Frame_t * p, const char * command )
char * pStr; char * pStr;
int i; int i;
// do not enter if the same command appears among the last five commands // 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) ) if ( !strcmp(pStr, Buffer) )
break; break;
if ( i == Vec_PtrSize(p->aHistory) ) if ( i == Vec_PtrSize(p->aHistory) )
{
Vec_PtrPush( p->aHistory, Extra_UtilStrsav(Buffer) ); Vec_PtrPush( p->aHistory, Extra_UtilStrsav(Buffer) );
Cmd_HistoryWrite( p, nLastSaved );
}
} }
} }
...@@ -111,7 +117,7 @@ void Cmd_HistoryRead( Abc_Frame_t * p ) ...@@ -111,7 +117,7 @@ void Cmd_HistoryRead( Abc_Frame_t * p )
SeeAlso [] SeeAlso []
***********************************************************************/ ***********************************************************************/
void Cmd_HistoryWrite( Abc_Frame_t * p ) void Cmd_HistoryWrite( Abc_Frame_t * p, int Limit )
{ {
FILE * pFile; FILE * pFile;
char * pStr; char * pStr;
...@@ -122,7 +128,8 @@ void Cmd_HistoryWrite( Abc_Frame_t * p ) ...@@ -122,7 +128,8 @@ void Cmd_HistoryWrite( Abc_Frame_t * p )
Abc_Print( 0, "Cannot open file \"abc.history\" for writing.\n" ); Abc_Print( 0, "Cannot open file \"abc.history\" for writing.\n" );
return; 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 ); fprintf( pFile, "%s\n", pStr );
fclose( pFile ); fclose( pFile );
} }
......
Markdown is supported
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