31#define If_LibBoxForEachBox( p, pBox, i ) \
32 Vec_PtrForEachEntry( If_Box_t *, p->vBoxes, pBox, i ) if ( pBox == NULL ) {} else
56 p->fBlack = (char)fBlack;
57 p->fOuter = (char)fOuter;
90 p->vBoxes = Vec_PtrAlloc( 100 );
106 Vec_PtrFree(
p->vBoxes );
123 return (
If_Box_t *)Vec_PtrEntry(
p->vBoxes, Id );
138 if ( pBox->
Id >= Vec_PtrSize(
p->vBoxes) )
139 Vec_PtrFillExtra(
p->vBoxes, 2 * pBox->
Id + 10, NULL );
140 assert( Vec_PtrEntry(
p->vBoxes, pBox->
Id ) == NULL );
141 Vec_PtrWriteEntry(
p->vBoxes, pBox->
Id, pBox );
167 char * pToken, * pName;
168 int fSeq, fBlack, fOuter;
169 int i, Id, nPis, nPos;
170 pFile = fopen( pFileName,
"rb" );
173 printf(
"Cannot open file \"%s\".\n", pFileName );
179 while ( fgets( pBuffer, nSize, pFile ) )
181 pToken =
strtok( pBuffer,
" \n\r\t" );
182 if ( pToken == NULL )
184 if ( pToken[0] ==
'.' )
186 if ( !
strcmp(pToken,
".box") )
189 pToken =
strtok( NULL,
" \n\r\t" );
192 pToken =
strtok( NULL,
" \n\r\t" );
193 pName = Abc_UtilStrsav(pToken);
195 pToken =
strtok( NULL,
" \n\r\t" );
196 nPis = atoi( pToken );
198 pToken =
strtok( NULL,
" \n\r\t" );
199 nPos = atoi( pToken );
201 fSeq = fBlack = fOuter = 0;
202 pToken =
strtok( NULL,
" \n\r\t" );
205 if ( !
strcmp(pToken,
"seq") )
207 else if ( !
strcmp(pToken,
"black") )
209 else if ( !
strcmp(pToken,
"outer") )
212 pToken =
strtok( NULL,
" \n\r\t" );
218 pBox =
If_BoxStart( pName, Id, nPis, nPos, fSeq, fBlack, fOuter );
224 assert( nPis > 0 && nPos > 0 );
225 for ( i = 0; i < nPis * nPos; i++ )
227 while ( pToken == NULL )
229 if ( fgets( pBuffer, nSize, pFile ) == NULL )
230 { printf(
"The table does not have enough entries.\n" ); fflush(stdout);
assert( 0 ); }
231 pToken =
strtok( pBuffer,
" \n\r\t" );
233 pBox->
pDelays[i] = (pToken[0] ==
'-') ? -1 : atoi(pToken);
234 pToken =
strtok( NULL,
" \n\r\t" );
257 static char pBuffer[1000];
258 int c;
char * pTemp = pBuffer;
259 while ( (c = fgetc(pFile)) != EOF )
263 while ( (c = fgetc(pFile)) != EOF )
267 if ( c ==
' ' || c ==
'\t' || c ==
'\n' || c ==
'\r' )
269 if ( pTemp > pBuffer )
276 return pTemp > pBuffer ? pBuffer : NULL;
283 char * pToken, * pName;
284 int i, Id, fBlack, nPis, nPos;
285 pFile = fopen( pFileName,
"rb" );
288 printf(
"Cannot open file \"%s\".\n", pFileName );
293 if ( pToken == NULL )
296 printf(
"Cannot read library name from file \"%s\".\n", pFileName );
299 if ( pToken[0] ==
'.' )
302 printf(
"Wrong box format. Please try \"read_box -e\".\n" );
311 pName = Abc_UtilStrsav(pToken);
317 fBlack = !atoi( pToken );
320 nPis = atoi( pToken );
323 nPos = atoi( pToken );
325 pBox =
If_BoxStart( pName, Id, nPis, nPos, 0, fBlack, 0 );
328 for ( i = 0; i < nPis * nPos; i++ )
343 fprintf( pFile,
"# Box library written by ABC on %s.\n",
Extra_TimeStamp() );
344 fprintf( pFile,
"# <Name> <ID> <Type> <I> <O>\n" );
348 for ( j = 0; j < pBox->
nPos; j++, fprintf(pFile,
"\n") )
349 for ( k = 0; k < pBox->
nPis; k++ )
351 fprintf( pFile,
" - " );
353 fprintf( pFile,
"%5d ", pBox->
pDelays[j * pBox->
nPis + k] );
359 pFile = fopen( pFileName,
"wb" );
362 printf(
"Cannot open file \"%s\".\n", pFileName );
367 printf(
"Finished writing box library into file \"%s\".\n", pFileName );
385 char * pFileNameOther;
388 pFile = fopen( pFileNameOther,
"r" );
#define ABC_ALLOC(type, num)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_DLL void Abc_FrameSetLibBox(void *pLib)
ABC_DLL void * Abc_FrameReadLibBox()
If_LibBox_t * If_LibBoxRead2(char *pFileName)
void If_LibBoxPrint(FILE *pFile, If_LibBox_t *p)
char * If_LibBoxGetToken(FILE *pFile)
If_Box_t * If_LibBoxReadBox(If_LibBox_t *p, int Id)
#define If_LibBoxForEachBox(p, pBox, i)
DECLARATIONS ///.
void If_LibBoxWrite(char *pFileName, If_LibBox_t *p)
If_LibBox_t * If_LibBoxRead(char *pFileName)
If_Box_t * If_BoxStart(char *pName, int Id, int nPis, int nPos, int fSeq, int fBlack, int fOuter)
FUNCTION DEFINITIONS ///.
int If_LibBoxNum(If_LibBox_t *p)
void If_LibBoxAdd(If_LibBox_t *p, If_Box_t *pBox)
If_Box_t * If_LibBoxFindBox(If_LibBox_t *p, char *pName)
If_Box_t * If_BoxDup(If_Box_t *p)
void If_BoxFree(If_Box_t *p)
If_LibBox_t * If_LibBoxDup(If_Box_t *p)
void If_LibBoxFree(If_LibBox_t *p)
If_LibBox_t * If_LibBoxStart()
int If_LibBoxLoad(char *pFileName)
struct If_LibBox_t_ If_LibBox_t
struct If_Box_t_ If_Box_t