247{
248 FILE * pFile;
251 char * pToken;
252 int i, nPis, nPos, nRegs, Number;
253 int * pNum2Id = NULL;
254
255 pFile = fopen( pFileName, "r" );
256 if ( pFile == NULL )
257 {
258 printf( "Saig_ManReadBlif(): Cannot open file for reading.\n" );
259 return NULL;
260 }
261
263 if ( pToken == NULL )
264 { printf( "Saig_ManReadBlif(): Error 1.\n" ); return NULL; }
265
267 if ( pToken == NULL )
268 { printf( "Saig_ManReadBlif(): Error 2.\n" ); return NULL; }
269
271 p->pName = Abc_UtilStrsav( pToken );
272 p->pSpec = Abc_UtilStrsav( pFileName );
273
275 if ( pToken == NULL ||
strcmp( pToken,
".inputs" ) )
276 { printf(
"Saig_ManReadBlif(): Error 3.\n" );
Aig_ManStop(
p);
return NULL; }
277 for ( nPis = 0; (pToken =
Saig_ManReadToken( pFile )) && pToken[0] !=
'.'; nPis++ );
278
279 if ( pToken == NULL ||
strcmp( pToken,
".outputs" ) )
280 { printf(
"Saig_ManReadBlif(): Error 4.\n" );
Aig_ManStop(
p);
return NULL; }
281 for ( nPos = 0; (pToken =
Saig_ManReadToken( pFile )) && pToken[0] !=
'.'; nPos++ );
282
283 if ( pToken == NULL )
284 { printf(
"Saig_ManReadBlif(): Error 5.\n" );
Aig_ManStop(
p);
return NULL; }
285 for ( nRegs = 0;
strcmp( pToken,
".latch" ) == 0; nRegs++ )
286 {
288 if ( pToken == NULL )
289 { printf(
"Saig_ManReadBlif(): Error 6.\n" );
Aig_ManStop(
p);
return NULL; }
291 if ( pToken == NULL )
292 { printf(
"Saig_ManReadBlif(): Error 7.\n" );
Aig_ManStop(
p);
return NULL; }
294 if ( pToken == NULL )
295 { printf(
"Saig_ManReadBlif(): Error 8.\n" );
Aig_ManStop(
p);
return NULL; }
297 if ( pToken == NULL )
298 { printf(
"Saig_ManReadBlif(): Error 9.\n" );
Aig_ManStop(
p);
return NULL; }
299 }
300
301 for ( i = 0; i < nPis + nRegs; i++ )
304
305 for ( i = 0;
strcmp( pToken,
".names" ) == 0; i++ )
306 {
307
309 if ( i == 0 && pToken[0] == 'n' )
310 {
311
313 if ( pToken == NULL ||
strcmp( pToken,
"1" ) )
314 { printf(
"Saig_ManReadBlif(): Error 10.\n" );
Aig_ManStop(
p);
return NULL; }
315
317 if ( pToken == NULL )
318 { printf(
"Saig_ManReadBlif(): Error 11.\n" );
Aig_ManStop(
p);
return NULL; }
319 continue;
320 }
322
323
325 if ( (pToken[0] == 'p' && pToken[1] == 'o') || (pToken[0] == 'l' && pToken[1] == 'i') )
326 {
327
329 if ( pToken == NULL )
330 { printf(
"Saig_ManReadBlif(): Error 12.\n" );
Aig_ManStop(
p);
return NULL; }
331 if ( pToken[0] == '0' )
332 pFanin0 = Aig_Not(pFanin0);
333
335 if ( pToken == NULL ||
strcmp( pToken,
"1" ) )
336 { printf(
"Saig_ManReadBlif(): Error 13.\n" );
Aig_ManStop(
p);
return NULL; }
338
340 if ( pToken == NULL )
341 { printf(
"Saig_ManReadBlif(): Error 14.\n" );
Aig_ManStop(
p);
return NULL; }
342 continue;
343 }
344
345
346
350
351 if ( pNum2Id == NULL )
352 {
353
354 int Size = (int)pow(10.0, (
double)(
strlen(pToken) - 1));
356 }
357
358
359
361 if ( pToken == NULL )
362 { printf(
"Saig_ManReadBlif(): Error 15.\n" );
Aig_ManStop(
p);
return NULL; }
363 if ( pToken[0] == '0' )
364 pFanin0 = Aig_Not(pFanin0);
365 if ( pToken[1] == '0' )
366 pFanin1 = Aig_Not(pFanin1);
367
369 if ( pToken == NULL ||
strcmp( pToken,
"1" ) )
370 { printf(
"Saig_ManReadBlif(): Error 16.\n" );
Aig_ManStop(
p);
return NULL; }
371
373 if ( pToken == NULL )
374 { printf(
"Saig_ManReadBlif(): Error 17.\n" );
Aig_ManStop(
p);
return NULL; }
375
376
377 pNode =
Aig_And(
p, pFanin0, pFanin1 );
378 if ( Aig_IsComplement(pNode) )
379 { printf(
"Saig_ManReadBlif(): Error 18.\n" );
Aig_ManStop(
p);
return NULL; }
380
381 pNum2Id[ Number ] = pNode->
Id;
382 }
383 if ( pToken == NULL ||
strcmp( pToken,
".end" ) )
384 { printf(
"Saig_ManReadBlif(): Error 19.\n" );
Aig_ManStop(
p);
return NULL; }
385 if ( nPos + nRegs != Aig_ManCoNum(
p) )
386 { printf(
"Saig_ManReadBlif(): Error 20.\n" );
Aig_ManStop(
p);
return NULL; }
387
389 pNum2Id[pNode->
Id] = pNode->
Id;
390
392
395 printf( "Saig_ManReadBlif(): Check has failed.\n" );
397}
#define ABC_CALLOC(type, num)
void Aig_ManSetRegNum(Aig_Man_t *p, int nRegs)
void Aig_ManStop(Aig_Man_t *p)
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
ABC_DLL int Aig_ManCheck(Aig_Man_t *p)
FUNCTION DECLARATIONS ///.
int Saig_ManReadNumber(Aig_Man_t *p, char *pToken)
Aig_Obj_t * Saig_ManReadNode(Aig_Man_t *p, int *pNum2Id, char *pToken)
char * Saig_ManReadToken(FILE *pFile)