/**Function************************************************************* Synopsis [Command procedure to allow for static BDD variable ordering.] Description [This procedure should be integrated in "abc\src\base\abci\abc.c" similar to how procedure Abc_CommandReorder() is currently integrated.] SideEffects [] SeeAlso [] ***********************************************************************/ int Abc_CommandOrder( Abc_Frame_t * pAbc, int argc, char ** argv ) { FILE * pOut, * pErr, * pFile; Abc_Ntk_t * pNtk; char * pFileName; int c; int fReverse; int fVerbose; extern void Abc_NtkImplementCiOrder( Abc_Ntk_t * pNtk, char * pFileName, int fReverse, int fVerbose ); extern void Abc_NtkFindCiOrder( Abc_Ntk_t * pNtk, int fReverse, int fVerbose ); pNtk = Abc_FrameReadNtk(pAbc); pOut = Abc_FrameReadOut(pAbc); pErr = Abc_FrameReadErr(pAbc); // set defaults fReverse = 0; fVerbose = 0; Extra_UtilGetoptReset(); while ( ( c = Extra_UtilGetopt( argc, argv, "rvh" ) ) != EOF ) { switch ( c ) { case 'r': fReverse ^= 1; break; case 'v': fVerbose ^= 1; break; case 'h': goto usage; default: goto usage; } } if ( pNtk == NULL ) { fprintf( pErr, "Empty network.\n" ); return 1; } // if the var order file is given, implement this order pFileName = NULL; if ( argc == globalUtilOptind + 1 ) { pFileName = argv[globalUtilOptind]; pFile = fopen( pFileName, "r" ); if ( pFile == NULL ) { fprintf( pErr, "Cannot open file \"%s\" with the BDD variable order.\n", pFileName ); return 1; } fclose( pFile ); } if ( pFileName ) Abc_NtkImplementCiOrder( pNtk, pFileName, fReverse, fVerbose ); else Abc_NtkFindCiOrder( pNtk, fReverse, fVerbose ); return 0; usage: fprintf( pErr, "usage: order [-rvh] \n" ); fprintf( pErr, "\t computes a good static CI variable order\n" ); fprintf( pErr, "\t-r : toggle reverse ordering [default = %s]\n", fReverse? "yes": "no" ); fprintf( pErr, "\t-v : prints verbose information [default = %s]\n", fVerbose? "yes": "no" ); fprintf( pErr, "\t-h : print the command usage\n"); fprintf( pErr, "\t : (optional) file with the given variable order\n" ); return 1; }