abc/src/base/cmd/cmdLoad.c

227 lines
5.8 KiB
C
Raw Normal View History

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"
ABC_NAMESPACE_IMPL_START
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
static int CmdCommandLoad ( Abc_Frame_t * pAbc, int argc, char ** argv );
////////////////////////////////////////////////////////////////////////
/// 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 )
{
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
if ( system( Vec_StrArray(vCommand) ) )
{
Abc_Print( -1, "The following command has returned non-zero exit status:\n" );
Abc_Print( -1, "\"%s\"\n", Vec_StrArray(vCommand) );
return 1;
}
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