2010-11-01 09:35:04 +01:00
|
|
|
/**CFile****************************************************************
|
|
|
|
|
|
|
|
|
|
FileName [cmdApi.c]
|
|
|
|
|
|
|
|
|
|
SystemName [ABC: Logic synthesis and verification system.]
|
|
|
|
|
|
|
|
|
|
PackageName [Command processing package.]
|
|
|
|
|
|
|
|
|
|
Synopsis [External procedures of the command package.]
|
|
|
|
|
|
|
|
|
|
Author [Alan Mishchenko]
|
|
|
|
|
|
|
|
|
|
Affiliation [UC Berkeley]
|
|
|
|
|
|
|
|
|
|
Date [Ver. 1.0. Started - June 20, 2005.]
|
|
|
|
|
|
|
|
|
|
Revision [$Id: cmdApi.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
|
|
|
|
#include "abc.h"
|
|
|
|
|
#include "mainInt.h"
|
|
|
|
|
#include "cmd.h"
|
|
|
|
|
#include "cmdInt.h"
|
2011-02-01 20:13:53 +01:00
|
|
|
#include "utilSignal.h"
|
2010-11-01 09:35:04 +01:00
|
|
|
|
|
|
|
|
ABC_NAMESPACE_IMPL_START
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
/// DECLARATIONS ///
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
/// FUNCTION DEFINITIONS ///
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
/**Function********************************************************************
|
|
|
|
|
|
|
|
|
|
Synopsis []
|
|
|
|
|
|
|
|
|
|
Description []
|
|
|
|
|
|
|
|
|
|
SideEffects []
|
|
|
|
|
|
|
|
|
|
SeeAlso []
|
|
|
|
|
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
int CmdCommandLoad( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|
|
|
|
{
|
|
|
|
|
Vec_Str_t * vCommand;
|
|
|
|
|
FILE * pFile;
|
|
|
|
|
int i;
|
|
|
|
|
vCommand = Vec_StrAlloc( 100 );
|
|
|
|
|
Vec_StrAppend( vCommand, "abccmd_" );
|
|
|
|
|
Vec_StrAppend( vCommand, argv[0] );
|
|
|
|
|
Vec_StrAppend( vCommand, ".exe" );
|
|
|
|
|
Vec_StrPush( vCommand, 0 );
|
|
|
|
|
// check if there is the binary
|
|
|
|
|
if ( (pFile = fopen( Vec_StrArray(vCommand), "r" )) == NULL )
|
|
|
|
|
{
|
2011-03-27 23:17:12 +02:00
|
|
|
Vec_StrFree( vCommand );
|
2010-11-01 09:35:04 +01:00
|
|
|
Abc_Print( -1, "Cannot run the binary \"%s\".\n\n", Vec_StrArray(vCommand) );
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
fclose( pFile );
|
|
|
|
|
Vec_StrPop( vCommand );
|
|
|
|
|
// add other arguments
|
|
|
|
|
for ( i = 1; i < argc; i++ )
|
|
|
|
|
{
|
|
|
|
|
Vec_StrAppend( vCommand, " " );
|
|
|
|
|
Vec_StrAppend( vCommand, argv[i] );
|
|
|
|
|
}
|
|
|
|
|
Vec_StrPush( vCommand, 0 );
|
|
|
|
|
// run the command line
|
2011-02-01 20:13:53 +01:00
|
|
|
if ( Util_SignalSystem( Vec_StrArray(vCommand) ) )
|
2010-11-01 09:35:04 +01:00
|
|
|
{
|
2011-03-27 23:17:12 +02:00
|
|
|
Vec_StrFree( vCommand );
|
2010-11-01 09:35:04 +01:00
|
|
|
Abc_Print( -1, "The following command has returned non-zero exit status:\n" );
|
|
|
|
|
Abc_Print( -1, "\"%s\"\n", Vec_StrArray(vCommand) );
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
2011-03-27 23:17:12 +02:00
|
|
|
Vec_StrFree( vCommand );
|
2010-11-01 09:35:04 +01:00
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**Function*************************************************************
|
|
|
|
|
|
|
|
|
|
Synopsis []
|
|
|
|
|
|
|
|
|
|
Description []
|
|
|
|
|
|
|
|
|
|
SideEffects []
|
|
|
|
|
|
|
|
|
|
SeeAlso []
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
|
|
|
|
#if defined(WIN32) && !defined(__cplusplus)
|
|
|
|
|
|
|
|
|
|
#include <direct.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// these structures are defined in <io.h> but are for some reason invisible
|
|
|
|
|
typedef unsigned long _fsize_t; // Could be 64 bits for Win32
|
|
|
|
|
|
|
|
|
|
struct _finddata_t {
|
|
|
|
|
unsigned attrib;
|
|
|
|
|
time_t time_create; // -1 for FAT file systems
|
|
|
|
|
time_t time_access; // -1 for FAT file systems
|
|
|
|
|
time_t time_write;
|
|
|
|
|
_fsize_t size;
|
|
|
|
|
char name[260];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
extern long _findfirst( char *filespec, struct _finddata_t *fileinfo );
|
|
|
|
|
extern int _findnext( long handle, struct _finddata_t *fileinfo );
|
|
|
|
|
extern int _findclose( long handle );
|
|
|
|
|
|
|
|
|
|
//extern char * _getcwd( char * buffer, int maxlen );
|
|
|
|
|
//extern int _chdir( const char *dirname );
|
|
|
|
|
|
|
|
|
|
/**Function*************************************************************
|
|
|
|
|
|
|
|
|
|
Synopsis [Collect file names ending with .exe]
|
|
|
|
|
|
|
|
|
|
Description []
|
|
|
|
|
|
|
|
|
|
SideEffects []
|
|
|
|
|
|
|
|
|
|
SeeAlso []
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
|
|
|
|
Vec_Ptr_t * CmdCollectFileNames()
|
|
|
|
|
{
|
|
|
|
|
Vec_Ptr_t * vFileNames;
|
|
|
|
|
struct _finddata_t c_file;
|
|
|
|
|
long hFile;
|
|
|
|
|
if( (hFile = _findfirst( "*.exe", &c_file )) == -1L )
|
|
|
|
|
{
|
|
|
|
|
// Abc_Print( 0, "No files with extention \"%s\" in the current directory.\n", "exe" );
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
vFileNames = Vec_PtrAlloc( 100 );
|
|
|
|
|
do {
|
|
|
|
|
Vec_PtrPush( vFileNames, Extra_UtilStrsav( c_file.name ) );
|
|
|
|
|
} while( _findnext( hFile, &c_file ) == 0 );
|
|
|
|
|
_findclose( hFile );
|
|
|
|
|
return vFileNames;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
|
|
/**Function*************************************************************
|
|
|
|
|
|
|
|
|
|
Synopsis [Collect file names ending with .exe]
|
|
|
|
|
|
|
|
|
|
Description []
|
|
|
|
|
|
|
|
|
|
SideEffects []
|
|
|
|
|
|
|
|
|
|
SeeAlso []
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
|
|
|
|
Vec_Ptr_t * CmdCollectFileNames()
|
|
|
|
|
{
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**Function*************************************************************
|
|
|
|
|
|
|
|
|
|
Synopsis []
|
|
|
|
|
|
|
|
|
|
Description []
|
|
|
|
|
|
|
|
|
|
SideEffects []
|
|
|
|
|
|
|
|
|
|
SeeAlso []
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
|
|
|
|
void Load_Init( Abc_Frame_t * pAbc )
|
|
|
|
|
{
|
|
|
|
|
Vec_Ptr_t * vFileNames;
|
|
|
|
|
char * pName, * pStop;
|
|
|
|
|
int i;
|
|
|
|
|
vFileNames = CmdCollectFileNames();
|
|
|
|
|
if ( vFileNames == NULL )
|
|
|
|
|
return;
|
|
|
|
|
Vec_PtrForEachEntry( char *, vFileNames, pName, i )
|
|
|
|
|
{
|
|
|
|
|
if ( strncmp( pName, "abccmd_", 7 ) )
|
|
|
|
|
continue;
|
|
|
|
|
// get the command name
|
|
|
|
|
// pName[6] = '!';
|
|
|
|
|
pStop = strstr( pName + 7, "." );
|
|
|
|
|
if ( pStop )
|
|
|
|
|
*pStop = 0;
|
|
|
|
|
// add the command
|
|
|
|
|
Cmd_CommandAdd( pAbc, "ZZ", pName+7, CmdCommandLoad, 0 );
|
|
|
|
|
// printf( "Loaded command \"%s\"\n", pName+7 );
|
|
|
|
|
}
|
|
|
|
|
Vec_PtrFreeFree( vFileNames );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**Function*************************************************************
|
|
|
|
|
|
|
|
|
|
Synopsis []
|
|
|
|
|
|
|
|
|
|
Description []
|
|
|
|
|
|
|
|
|
|
SideEffects []
|
|
|
|
|
|
|
|
|
|
SeeAlso []
|
|
|
|
|
|
|
|
|
|
***********************************************************************/
|
|
|
|
|
void Load_End( Abc_Frame_t * pAbc )
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
/// END OF FILE ///
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ABC_NAMESPACE_IMPL_END
|
|
|
|
|
|