| /**CFile**************************************************************** |
| |
| FileName [mainUtils.c] |
| |
| SystemName [ABC: Logic synthesis and verification system.] |
| |
| PackageName [The main package.] |
| |
| Synopsis [Miscellaneous utilities.] |
| |
| Author [Alan Mishchenko] |
| |
| Affiliation [UC Berkeley] |
| |
| Date [Ver. 1.0. Started - June 20, 2005.] |
| |
| Revision [$Id: mainUtils.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] |
| |
| ***********************************************************************/ |
| |
| #include "base/abc/abc.h" |
| #include "mainInt.h" |
| |
| #ifdef ABC_USE_READLINE |
| #include <readline/readline.h> |
| #include <readline/history.h> |
| #endif |
| |
| ABC_NAMESPACE_IMPL_START |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// DECLARATIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| static char * DateReadFromDateString( char * datestr ); |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// FUNCTION DEFINITIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| /**Function************************************************************* |
| |
| Synopsis [] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| char * Abc_UtilsGetVersion( Abc_Frame_t * pAbc ) |
| { |
| static char Version[1000]; |
| sprintf(Version, "%s (compiled %s %s)", ABC_VERSION, __DATE__, __TIME__); |
| return Version; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| char * Abc_UtilsGetUsersInput( Abc_Frame_t * pAbc ) |
| { |
| static char Prompt[5000]; |
| sprintf( Prompt, "abc %02d> ", pAbc->nSteps ); |
| #ifdef ABC_USE_READLINE |
| { |
| static char * line = NULL; |
| if (line != NULL) ABC_FREE(line); |
| line = readline(Prompt); |
| if (line == NULL){ printf("***EOF***\n"); exit(0); } |
| add_history(line); |
| return line; |
| } |
| #else |
| { |
| char * pRetValue; |
| fprintf( pAbc->Out, "%s", Prompt ); |
| pRetValue = fgets( Prompt, 5000, stdin ); |
| return Prompt; |
| } |
| #endif |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Abc_UtilsPrintHello( Abc_Frame_t * pAbc ) |
| { |
| fprintf( pAbc->Out, "%s\n", pAbc->sVersion ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Abc_UtilsPrintUsage( Abc_Frame_t * pAbc, char * ProgName ) |
| { |
| fprintf( pAbc->Err, "\n" ); |
| fprintf( pAbc->Err, |
| "usage: %s [-c cmd] [-q cmd] [-C cmd] [-Q cmd] [-f script] [-h] [-o file] [-s] [-t type] [-T type] [-x] [-b] [file]\n", |
| ProgName); |
| fprintf( pAbc->Err, " -c cmd\texecute commands `cmd'\n"); |
| fprintf( pAbc->Err, " -q cmd\texecute commands `cmd' quietly\n"); |
| fprintf( pAbc->Err, " -C cmd\texecute commands `cmd', then continue in interactive mode\n"); |
| fprintf( pAbc->Err, " -Q cmd\texecute commands `cmd' quietly, then continue in interactive mode\n"); |
| fprintf( pAbc->Err, " -F script\texecute commands from a script file and echo commands\n"); |
| fprintf( pAbc->Err, " -f script\texecute commands from a script file\n"); |
| fprintf( pAbc->Err, " -h\t\tprint the command usage\n"); |
| fprintf( pAbc->Err, " -o file\tspecify output filename to store the result\n"); |
| fprintf( pAbc->Err, " -s\t\tdo not read any initialization file\n"); |
| fprintf( pAbc->Err, " -t type\tspecify input type (blif_mv (default), blif_mvs, blif, or none)\n"); |
| fprintf( pAbc->Err, " -T type\tspecify output type (blif_mv (default), blif_mvs, blif, or none)\n"); |
| fprintf( pAbc->Err, " -x\t\tequivalent to '-t none -T none'\n"); |
| fprintf( pAbc->Err, " -b\t\trunning in bridge mode\n"); |
| fprintf( pAbc->Err, "\n" ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Abc_UtilsSource( Abc_Frame_t * pAbc ) |
| { |
| #ifdef WIN32 |
| if ( Cmd_CommandExecute(pAbc, "source abc.rc") ) |
| { |
| if ( Cmd_CommandExecute(pAbc, "source ..\\abc.rc") == 0 ) |
| printf( "Loaded \"abc.rc\" from the parent directory.\n" ); |
| else if ( Cmd_CommandExecute(pAbc, "source ..\\..\\abc.rc") == 0 ) |
| printf( "Loaded \"abc.rc\" from the grandparent directory.\n" ); |
| } |
| #else |
| |
| #if 0 |
| { |
| char * sPath1, * sPath2; |
| |
| // If .rc is present in both the home and current directories, then read |
| // it from the home directory. Otherwise, read it from wherever it's located. |
| sPath1 = Extra_UtilFileSearch(".rc", "~/", "r"); |
| sPath2 = Extra_UtilFileSearch(".rc", ".", "r"); |
| |
| if ( sPath1 && sPath2 ) { |
| /* ~/.rc == .rc : Source the file only once */ |
| (void) Cmd_CommandExecute(pAbc, "source -s ~/.rc"); |
| } |
| else { |
| if (sPath1) { |
| (void) Cmd_CommandExecute(pAbc, "source -s ~/.rc"); |
| } |
| if (sPath2) { |
| (void) Cmd_CommandExecute(pAbc, "source -s .rc"); |
| } |
| } |
| if ( sPath1 ) ABC_FREE(sPath1); |
| if ( sPath2 ) ABC_FREE(sPath2); |
| |
| /* execute the abc script which can be open with the "open_path" */ |
| Cmd_CommandExecute( pAbc, "source -s abc.rc" ); |
| } |
| #endif |
| |
| { |
| char * sPath1, * sPath2; |
| char * home; |
| |
| // If .rc is present in both the home and current directories, then read |
| // it from the home directory. Otherwise, read it from wherever it's located. |
| home = getenv("HOME"); |
| if (home){ |
| char * sPath3 = ABC_ALLOC(char, strlen(home) + 2); |
| (void) sprintf(sPath3, "%s/", home); |
| sPath1 = Extra_UtilFileSearch(".abc.rc", sPath3, "r"); |
| ABC_FREE(sPath3); |
| }else |
| sPath1 = NULL; |
| |
| sPath2 = Extra_UtilFileSearch(".abc.rc", ".", "r"); |
| |
| if ( sPath1 && sPath2 ) { |
| /* ~/.rc == .rc : Source the file only once */ |
| char *tmp_cmd = ABC_ALLOC(char, strlen(sPath1)+12); |
| (void) sprintf(tmp_cmd, "source -s %s", sPath1); |
| // (void) Cmd_CommandExecute(pAbc, "source -s ~/.abc.rc"); |
| (void) Cmd_CommandExecute(pAbc, tmp_cmd); |
| ABC_FREE(tmp_cmd); |
| } |
| else { |
| if (sPath1) { |
| char *tmp_cmd = ABC_ALLOC(char, strlen(sPath1)+12); |
| (void) sprintf(tmp_cmd, "source -s %s", sPath1); |
| // (void) Cmd_CommandExecute(pAbc, "source -s ~/.abc.rc"); |
| (void) Cmd_CommandExecute(pAbc, tmp_cmd); |
| ABC_FREE(tmp_cmd); |
| } |
| if (sPath2) { |
| char *tmp_cmd = ABC_ALLOC(char, strlen(sPath2)+12); |
| (void) sprintf(tmp_cmd, "source -s %s", sPath2); |
| // (void) Cmd_CommandExecute(pAbc, "source -s .abc.rc"); |
| (void) Cmd_CommandExecute(pAbc, tmp_cmd); |
| ABC_FREE(tmp_cmd); |
| } |
| } |
| if ( sPath1 ) ABC_FREE(sPath1); |
| if ( sPath2 ) ABC_FREE(sPath2); |
| |
| /* execute the abc script which can be open with the "open_path" */ |
| Cmd_CommandExecute( pAbc, "source -s abc.rc" ); |
| } |
| |
| #endif //WIN32 |
| } |
| |
| /**Function******************************************************************** |
| |
| Synopsis [Returns the date in a brief format assuming its coming from |
| the program `date'.] |
| |
| Description [optional] |
| |
| SideEffects [] |
| |
| ******************************************************************************/ |
| char * DateReadFromDateString( char * datestr ) |
| { |
| static char result[25]; |
| char day[10]; |
| char month[10]; |
| char zone[10]; |
| char *at; |
| int date; |
| int hour; |
| int minute; |
| int second; |
| int year; |
| |
| if (sscanf(datestr, "%s %s %2d %2d:%2d:%2d %s %4d", |
| day, month, &date, &hour, &minute, &second, zone, &year) == 8) { |
| if (hour >= 12) { |
| if (hour >= 13) hour -= 12; |
| at = "PM"; |
| } |
| else { |
| if (hour == 0) hour = 12; |
| at = "AM"; |
| } |
| (void) sprintf(result, "%d-%3s-%02d at %d:%02d %s", |
| date, month, year % 100, hour, minute, at); |
| return result; |
| } |
| else { |
| return datestr; |
| } |
| } |
| |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// END OF FILE /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| |
| ABC_NAMESPACE_IMPL_END |