Recast all uses of resist-class and device class in routines using
code from extflat from type unsigned long to type TileTypeBitMask. This increases the number of types of each to 256 and tracks the number of types, so it should be difficult to exceed this amount.
This commit is contained in:
parent
7f11020ab4
commit
1c0dbc907a
|
|
@ -97,39 +97,39 @@ struct {
|
|||
short resClassSub ; /* The resistance class of the substrate of the dev */
|
||||
TileType devType ; /* Magic tile type of the device */
|
||||
char *defSubs ; /* The default substrate node */
|
||||
} fetInfo[MAXDEVTYPES];
|
||||
} fetInfo[TT_MAXTYPES];
|
||||
|
||||
typedef struct {
|
||||
long visitMask:MAXDEVTYPES;
|
||||
TileTypeBitMask visitMask;
|
||||
} nodeClient;
|
||||
|
||||
typedef struct {
|
||||
HierName *lastPrefix;
|
||||
long visitMask:MAXDEVTYPES;
|
||||
TileTypeBitMask visitMask;
|
||||
} nodeClientHier;
|
||||
|
||||
#define NO_RESCLASS -1
|
||||
|
||||
#define markVisited(client, rclass) \
|
||||
{ (client)->visitMask |= (1<<rclass); }
|
||||
{ TTMaskSetType(&((client)->visitMask), rclass); }
|
||||
|
||||
#define clearVisited(client) \
|
||||
{ (client)->visitMask = (long)0; }
|
||||
{ TTMaskZero(&((client)->visitMask)); }
|
||||
|
||||
#define beenVisited(client, rclass) \
|
||||
( (client)->visitMask & (1<<rclass))
|
||||
( TTMaskHasType(&((client)->visitMask), rclass) )
|
||||
|
||||
#define initNodeClient(node) \
|
||||
{ \
|
||||
(node)->efnode_client = (ClientData) mallocMagic((unsigned) (sizeof(nodeClient))); \
|
||||
(( nodeClient *)(node)->efnode_client)->visitMask = (long) 0; \
|
||||
TTMaskZero(&(( nodeClient *)(node)->efnode_client)->visitMask); \
|
||||
}
|
||||
|
||||
|
||||
#define initNodeClientHier(node) \
|
||||
{ \
|
||||
(node)->efnode_client = (ClientData) mallocMagic((unsigned) (sizeof(nodeClientHier))); \
|
||||
((nodeClientHier *) (node)->efnode_client)->visitMask = (long) 0; \
|
||||
TTMaskZero(&(( nodeClientHier *)(node)->efnode_client)->visitMask); \
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -572,7 +572,7 @@ runexttosim:
|
|||
/* create default fetinfo entries (MOSIS) which can be overriden by
|
||||
the command line arguments */
|
||||
|
||||
for ( i = 0 ; i < MAXDEVTYPES ; i++ )
|
||||
for ( i = 0 ; i < TT_MAXTYPES ; i++ )
|
||||
{
|
||||
fetInfo[i].resClassSource = NO_RESCLASS;
|
||||
fetInfo[i].resClassDrain = NO_RESCLASS;
|
||||
|
|
@ -589,12 +589,12 @@ runexttosim:
|
|||
while (ExtGetDevInfo(idx++, &devname, &devtype, &s_rclass, &d_rclass,
|
||||
&sub_rclass, &subname))
|
||||
{
|
||||
if (idx == MAXDEVTYPES)
|
||||
if (idx == TT_MAXTYPES)
|
||||
{
|
||||
TxError("Error: Ran out of space for device types!\n");
|
||||
break;
|
||||
}
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, devname);
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, devname);
|
||||
|
||||
if (EFStyle != NULL)
|
||||
{
|
||||
|
|
@ -676,26 +676,26 @@ main(argc, argv)
|
|||
EFInit();
|
||||
/* create default fetinfo entries (MOSIS) which can be overriden by
|
||||
the command line arguments */
|
||||
for ( i = 0 ; i < MAXDEVTYPES ; i++ ) {
|
||||
for ( i = 0 ; i < TT_MAXTYPES ; i++ ) {
|
||||
fetInfo[i].resClassSource = NO_RESCLASS;
|
||||
fetInfo[i].resClassDrain = NO_RESCLASS;
|
||||
fetInfo[i].resClassSub = NO_RESCLASS;
|
||||
fetInfo[i].defSubs = NULL;
|
||||
fetInfo[i].devType = TT_SPACE;
|
||||
}
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, "nfet");
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, "nfet");
|
||||
fetInfo[i].resClassSource = fetInfo[i].resClassDrain = 0 ;
|
||||
fetInfo[i].resClassSub = NO_RESCLASS ;
|
||||
fetInfo[i].defSubs = "Gnd!";
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, "pfet");
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, "pfet");
|
||||
fetInfo[i].resClassSource = fetInfo[i].resClassDrain = 1 ;
|
||||
fetInfo[i].resClassSub = 6 ;
|
||||
fetInfo[i].defSubs = "Vdd!";
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, "nmos");
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, "nmos");
|
||||
fetInfo[i].resClassSource = fetInfo[i].resClassDrain = 0 ;
|
||||
fetInfo[i].resClassSub = NO_RESCLASS ;
|
||||
fetInfo[i].defSubs = "Gnd!";
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, "pmos");
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, "pmos");
|
||||
fetInfo[i].resClassSource = fetInfo[i].resClassDrain = 1 ;
|
||||
fetInfo[i].resClassSub = 6 ;
|
||||
fetInfo[i].defSubs = "Vdd!";
|
||||
|
|
@ -896,7 +896,7 @@ simmainArgs(pargc, pargv)
|
|||
rClassSub = NO_RESCLASS ;
|
||||
if ( sscanf(rp, "%d/%s", &rClass, subsNode) != 2 ) goto usage;
|
||||
}
|
||||
ndx = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, cp);
|
||||
ndx = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, cp);
|
||||
fetInfo[ndx].resClassSource = rClass;
|
||||
fetInfo[ndx].resClassDrain = rClass;
|
||||
fetInfo[ndx].resClassSub = rClassSub;
|
||||
|
|
@ -1402,7 +1402,7 @@ bool simnAPHier(dterm, hierName, resClass, scale, outf)
|
|||
initNodeClientHier(node);
|
||||
nc = (nodeClientHier *)node->efnode_client;
|
||||
if ( nc->lastPrefix != hierName ) {
|
||||
nc->visitMask = 0;
|
||||
TTMaskZero(&(nc->visitMask));
|
||||
nc->lastPrefix = hierName;
|
||||
}
|
||||
if ( resClass == NO_RESCLASS ||
|
||||
|
|
|
|||
|
|
@ -1264,10 +1264,10 @@ spcnodeHierVisit(hc, node, res, cap)
|
|||
|
||||
if (node->efnode_client)
|
||||
{
|
||||
isConnected = (esDistrJunct) ?
|
||||
(((nodeClient *)node->efnode_client)->m_w.widths != NULL) :
|
||||
((((nodeClient *)node->efnode_client)->m_w.visitMask
|
||||
& DEV_CONNECT_MASK) != 0);
|
||||
if (esDistrJunct)
|
||||
isConnected = (((nodeClient *)node->efnode_client)->m_w.widths != NULL);
|
||||
else
|
||||
isConnected = !TTMaskIsZero(&((nodeClient *)node->efnode_client)->m_w.visitMask);
|
||||
}
|
||||
if (!isConnected && esDevNodesOnly)
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ int esNoModelType; /* index for device type "None" (model-less device) */
|
|||
HashTable subcktNameTable ; /* the hash table itself */
|
||||
DQueue subcktNameQueue ; /* q used to print it sorted at the end*/
|
||||
|
||||
fetInfoList esFetInfo[MAXDEVTYPES];
|
||||
fetInfoList esFetInfo[TT_MAXTYPES];
|
||||
|
||||
/* Record for keeping a list of global names */
|
||||
|
||||
|
|
@ -90,7 +90,7 @@ typedef struct GLL {
|
|||
char *gll_name;
|
||||
} globalList;
|
||||
|
||||
unsigned long initMask = 0;
|
||||
TileTypeBitMask initMask; /* Used for device types, not tile types */
|
||||
|
||||
bool esMergeDevsA = FALSE; /* aggressive merging of devs L1=L2 merge them */
|
||||
bool esMergeDevsC = FALSE; /* conservative merging of devs L1=L2 and W1=W2 */
|
||||
|
|
@ -728,7 +728,7 @@ runexttospice:
|
|||
/* create default devinfo entries (MOSIS) which can be overridden by
|
||||
the command line arguments */
|
||||
|
||||
for ( i = 0 ; i < MAXDEVTYPES ; i++ ) {
|
||||
for ( i = 0 ; i < TT_MAXTYPES ; i++ ) {
|
||||
esFetInfo[i].resClassSource = NO_RESCLASS;
|
||||
esFetInfo[i].resClassDrain = NO_RESCLASS;
|
||||
esFetInfo[i].resClassSub = NO_RESCLASS;
|
||||
|
|
@ -743,12 +743,12 @@ runexttospice:
|
|||
while (ExtGetDevInfo(idx++, &devname, &devtype, &s_rclass, &d_rclass,
|
||||
&sub_rclass, &subname))
|
||||
{
|
||||
if (idx == MAXDEVTYPES)
|
||||
if (idx == TT_MAXTYPES)
|
||||
{
|
||||
TxError("Error: Ran out of space for device types!\n");
|
||||
break;
|
||||
}
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, devname);
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, devname);
|
||||
if (!strcmp(devname, "None"))
|
||||
esNoModelType = i;
|
||||
if (EFStyle != NULL)
|
||||
|
|
@ -908,7 +908,9 @@ runexttospice:
|
|||
if (!esDoPorts)
|
||||
EFVisitSubcircuits(subcktUndef, (ClientData) NULL);
|
||||
|
||||
initMask = ( esDistrJunct ) ? (unsigned long)0 : DEV_CONNECT_MASK;
|
||||
TTMaskZero(&initMask);
|
||||
if (!esDistrJunct)
|
||||
TTMaskCom(&initMask);
|
||||
|
||||
if (esMergeDevsA || esMergeDevsC)
|
||||
{
|
||||
|
|
@ -924,7 +926,7 @@ runexttospice:
|
|||
else if (esDistrJunct)
|
||||
EFVisitDevs(devDistJunctVisit, (ClientData) NULL);
|
||||
EFVisitDevs(spcdevVisit, (ClientData) NULL);
|
||||
initMask = (unsigned long) 0;
|
||||
TTMaskZero(&initMask);
|
||||
if (flatFlags & EF_FLATCAPS)
|
||||
{
|
||||
(void) sprintf( esSpiceCapFormat, "C%%d %%s %%s %%.%dlffF\n",
|
||||
|
|
@ -994,25 +996,25 @@ main(argc, argv)
|
|||
EFResistThreshold = INFINITE_THRESHOLD ;
|
||||
/* create default devinfo entries (MOSIS) which can be overriden by
|
||||
the command line arguments */
|
||||
for ( i = 0 ; i < MAXDEVTYPES ; i++ ) {
|
||||
for ( i = 0 ; i < TT_MAXTYPES ; i++ ) {
|
||||
esFetInfo[i].resClassSource = NO_RESCLASS;
|
||||
esFetInfo[i].resClassDrain = NO_RESCLASS;
|
||||
esFetInfo[i].resClassSub = NO_RESCLASS;
|
||||
esFetInfo[i].defSubs = NULL;
|
||||
}
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, "ndev");
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, "ndev");
|
||||
esFetInfo[i].resClassSource = esFetInfo[i].resClassDrain = 0 ;
|
||||
esFetInfo[i].resClassSub = NO_RESCLASS ;
|
||||
esFetInfo[i].defSubs = "Gnd!";
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, "pdev");
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, "pdev");
|
||||
esFetInfo[i].resClassSource = esFetInfo[i].resClassDrain = 1 ;
|
||||
esFetInfo[i].resClassSub = 8 ;
|
||||
esFetInfo[i].defSubs = "Vdd!";
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, "nmos");
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, "nmos");
|
||||
esFetInfo[i].resClassSource = esFetInfo[i].resClassDrain = 0 ;
|
||||
esFetInfo[i].resClassSub = NO_RESCLASS ;
|
||||
esFetInfo[i].defSubs = "Gnd!";
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, "pmos");
|
||||
i = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, "pmos");
|
||||
esFetInfo[i].resClassSource = esFetInfo[i].resClassDrain = 1 ;
|
||||
esFetInfo[i].resClassSub = 8 ;
|
||||
esFetInfo[i].defSubs = "Vdd!";
|
||||
|
|
@ -1078,7 +1080,9 @@ main(argc, argv)
|
|||
if (!esDoPorts)
|
||||
EFVisitSubcircuits(subcktUndef, (ClientData) NULL);
|
||||
|
||||
initMask = ( esDistrJunct ) ? (unsigned long)0 : DEV_CONNECT_MASK ;
|
||||
TTMaskZero(&initMask);
|
||||
if (!esDistrJunct)
|
||||
TTMaskCom(&initMask);
|
||||
|
||||
if ( esMergeDevsA || esMergeDevsC ) {
|
||||
EFVisitDevs(devMergeVisit, (ClientData) NULL);
|
||||
|
|
@ -1092,7 +1096,7 @@ main(argc, argv)
|
|||
} else if ( esDistrJunct )
|
||||
EFVisitDevs(devDistJunctVisit, (ClientData) NULL);
|
||||
EFVisitDevs(spcdevVisit, (ClientData) NULL);
|
||||
initMask = (unsigned long) 0;
|
||||
TTMaskZero(&initMask);
|
||||
if (flatFlags & EF_FLATCAPS) {
|
||||
(void) sprintf( esSpiceCapFormat, "C%%d %%s %%s %%.%dlffF\n",esCapAccuracy);
|
||||
EFVisitCaps(spccapVisit, (ClientData) NULL);
|
||||
|
|
@ -1240,17 +1244,9 @@ spcmainArgs(pargc, pargv)
|
|||
rClassSub = -1 ;
|
||||
if ( sscanf(rp, "%d/%s", &rClass, subsNode) != 2 ) goto usage;
|
||||
}
|
||||
ndx = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, cp);
|
||||
ndx = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, cp);
|
||||
esFetInfo[ndx].resClassSource = esFetInfo[ndx].resClassDrain = rClass;
|
||||
esFetInfo[ndx].resClassSub = rClassSub;
|
||||
if ( ((1<<rClass) & DEV_CONNECT_MASK) ||
|
||||
((1<<rClass) & DEV_CONNECT_MASK) ) {
|
||||
TxError("Oops it seems that you have 31\n");
|
||||
TxError("resistance classes. You will need to recompile");
|
||||
TxError("the extflat package and change ext2sim/spice\n");
|
||||
TxError("DEV_CONNECT_MASK and or nodeClient\n");
|
||||
exit (1);
|
||||
}
|
||||
esFetInfo[ndx].defSubs = (char *)mallocMagic((unsigned)(strlen(subsNode)+1));
|
||||
strcpy(esFetInfo[ndx].defSubs,subsNode);
|
||||
TxError("info: dev %s(%d) srcRclass=%d drnRclass=%d subRclass=%d dSub=%s\n",
|
||||
|
|
@ -2910,8 +2906,10 @@ FILE *outf;
|
|||
initNodeClientHier(nn->efnn_node);
|
||||
|
||||
if (!esDistrJunct)
|
||||
((nodeClient *)nn->efnn_node->efnode_client)->m_w.visitMask |=
|
||||
DEV_CONNECT_MASK;
|
||||
{
|
||||
TTMaskZero(&((nodeClient *)nn->efnn_node->efnode_client)->m_w.visitMask);
|
||||
TTMaskCom(&((nodeClient *)nn->efnn_node->efnode_client)->m_w.visitMask);
|
||||
}
|
||||
return nn->efnn_node;
|
||||
}
|
||||
}
|
||||
|
|
@ -3126,7 +3124,10 @@ spcdevOutNode(prefix, suffix, name, outf)
|
|||
|
||||
/* Mark node as visited */
|
||||
if (!esDistrJunct)
|
||||
((nodeClient *)nn->efnn_node->efnode_client)->m_w.visitMask |= DEV_CONNECT_MASK;
|
||||
{
|
||||
TTMaskZero(&((nodeClient *)nn->efnn_node->efnode_client)->m_w.visitMask);
|
||||
TTMaskCom(&((nodeClient *)nn->efnn_node->efnode_client)->m_w.visitMask);
|
||||
}
|
||||
|
||||
return (1 + strlen(nname));
|
||||
}
|
||||
|
|
@ -3279,8 +3280,7 @@ spcnodeVisit(node, res, cap)
|
|||
{
|
||||
isConnected = (esDistrJunct) ?
|
||||
(((nodeClient *)node->efnode_client)->m_w.widths != NULL) :
|
||||
((((nodeClient *)node->efnode_client)->m_w.visitMask
|
||||
& DEV_CONNECT_MASK) != 0);
|
||||
(!TTMaskIsZero(&((nodeClient *)node->efnode_client)->m_w.visitMask));
|
||||
}
|
||||
if (!isConnected && esDevNodesOnly)
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ extern FILE *esSpiceF;
|
|||
extern float esScale; /* negative if hspice the EFScale/100 otherwise */
|
||||
|
||||
extern unsigned short esFormat;
|
||||
extern unsigned long initMask;
|
||||
extern TileTypeBitMask initMask;
|
||||
|
||||
extern int esCapNum, esDevNum, esResNum, esDiodeNum;
|
||||
extern int esNodeNum; /* just in case we're extracting spice2 */
|
||||
|
|
@ -96,19 +96,15 @@ typedef struct {
|
|||
char *defSubs ; /* the default substrate node */
|
||||
} fetInfoList;
|
||||
|
||||
extern fetInfoList esFetInfo[MAXDEVTYPES];
|
||||
extern fetInfoList esFetInfo[TT_MAXTYPES];
|
||||
|
||||
#define MAX_STR_SIZE (1<<11) /* 2K should be enough for keeping temp
|
||||
names even of the most complicated design */
|
||||
|
||||
/* Node clients for figuring out areas and perimeters of sources and drains */
|
||||
typedef struct {
|
||||
long _duml:MAXDEVTYPES;
|
||||
} _dum; /* if you get an error here you should change
|
||||
the data structures and visitMask */
|
||||
|
||||
typedef union {
|
||||
long visitMask; /* mask for normal visits */
|
||||
TileTypeBitMask visitMask; /* mask for normal visits */
|
||||
float *widths; /* width used for distributing area perim */
|
||||
} maskOrWidth ;
|
||||
|
||||
|
|
@ -125,32 +121,26 @@ typedef struct {
|
|||
#define NO_RESCLASS -1
|
||||
|
||||
#define markVisited(client, rclass) \
|
||||
{ (client)->m_w.visitMask |= (1<<rclass); }
|
||||
{ TTMaskSetType(&((client)->m_w.visitMask), rclass); }
|
||||
|
||||
#define clearVisited(client) \
|
||||
{ (client)->m_w.visitMask = (long)0; }
|
||||
{ TTMaskZero(&((client)->m_w.visitMask)); }
|
||||
|
||||
#define beenVisited(client, rclass) \
|
||||
( (client)->m_w.visitMask & (1<<rclass))
|
||||
|
||||
/*
|
||||
* Used to mark the nodes which are connected to devs. initMask is set to
|
||||
* DEV_CONNECT_MASK only when we are in visitDevs
|
||||
*/
|
||||
#define DEV_CONNECT_MASK ((unsigned long)1<<(sizeof(long)*BITSPERCHAR-1))
|
||||
( TTMaskHasType(&((client)->m_w.visitMask), rclass) )
|
||||
|
||||
#define initNodeClient(node) \
|
||||
{ \
|
||||
(node)->efnode_client = (ClientData) mallocMagic((unsigned) (sizeof(nodeClient))); \
|
||||
(( nodeClient *)(node)->efnode_client)->spiceNodeName = NULL; \
|
||||
(( nodeClient *)(node)->efnode_client)->m_w.visitMask = (unsigned long)initMask; \
|
||||
TTMaskSetMask(&(((nodeClient *)(node)->efnode_client)->m_w.visitMask), &initMask);\
|
||||
}
|
||||
|
||||
|
||||
#define initNodeClientHier(node) \
|
||||
{ \
|
||||
(node)->efnode_client = (ClientData) mallocMagic((unsigned)(sizeof(nodeClientHier))); \
|
||||
((nodeClientHier *) (node)->efnode_client)->m_w.visitMask = (unsigned long) 0; \
|
||||
TTMaskZero (&((nodeClientHier *) (node)->efnode_client)->m_w.visitMask); \
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -42,36 +42,36 @@ int antennacheckArgs();
|
|||
int antennacheckVisit();
|
||||
|
||||
typedef struct {
|
||||
long visitMask:MAXDEVTYPES;
|
||||
TileTypeBitMask visitMask;
|
||||
} nodeClient;
|
||||
|
||||
typedef struct {
|
||||
HierName *lastPrefix;
|
||||
long visitMask:MAXDEVTYPES;
|
||||
TileTypeBitMask visitMask;
|
||||
} nodeClientHier;
|
||||
|
||||
#define NO_RESCLASS -1
|
||||
|
||||
#define markVisited(client, rclass) \
|
||||
{ (client)->visitMask |= (1<<rclass); }
|
||||
{ TTMaskSetType(&((client)->visitMask), rclass); }
|
||||
|
||||
#define clearVisited(client) \
|
||||
{ (client)->visitMask = (long)0; }
|
||||
{ TTMaskZero(&((client)->visitMask); }
|
||||
|
||||
#define beenVisited(client, rclass) \
|
||||
( (client)->visitMask & (1<<rclass))
|
||||
( TTMaskHasType(&((client)->visitMask), rclass) )
|
||||
|
||||
#define initNodeClient(node) \
|
||||
{ \
|
||||
(node)->efnode_client = (ClientData) mallocMagic((unsigned) (sizeof(nodeClient))); \
|
||||
(( nodeClient *)(node)->efnode_client)->visitMask = (long) 0; \
|
||||
TTMaskZero(&(( nodeClient *)(node)->efnode_client)->visitMask); \
|
||||
}
|
||||
|
||||
|
||||
#define initNodeClientHier(node) \
|
||||
{ \
|
||||
(node)->efnode_client = (ClientData) mallocMagic((unsigned) (sizeof(nodeClientHier))); \
|
||||
((nodeClientHier *) (node)->efnode_client)->visitMask = (long) 0; \
|
||||
TTMaskZero(&(( nodeClientHier *)(node)->efnode_client)->visitMask); \
|
||||
}
|
||||
|
||||
/* Diagnostic */
|
||||
|
|
@ -232,12 +232,12 @@ runantennacheck:
|
|||
idx = 0;
|
||||
while (ExtGetDevInfo(idx++, &devname, NULL, NULL, NULL, NULL, NULL))
|
||||
{
|
||||
if (idx == MAXDEVTYPES)
|
||||
if (idx == TT_MAXTYPES)
|
||||
{
|
||||
TxError("Error: Ran out of space for device types!\n");
|
||||
break;
|
||||
}
|
||||
efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, devname);
|
||||
efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, devname);
|
||||
}
|
||||
|
||||
/* Build device lookup table */
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ static char rcsid[] __attribute__ ((unused)) = "$Header$";
|
|||
#define MAXTYPES 100
|
||||
|
||||
/* Table of transistor types */
|
||||
char *EFDevTypes[MAXDEVTYPES];
|
||||
char *EFDevTypes[TT_MAXTYPES];
|
||||
int EFDevNumTypes;
|
||||
|
||||
/* Table of Magic layers */
|
||||
|
|
@ -802,7 +802,7 @@ efBuildDevice(def, class, type, r, argc, argv)
|
|||
|
||||
nterminals = (argc - argstart) / 3;
|
||||
|
||||
dev_type = efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, type);
|
||||
dev_type = efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, type);
|
||||
|
||||
/* Determine if this device has been seen before */
|
||||
/* NOTE: This is done by tile type, not name, because the extresist
|
||||
|
|
|
|||
|
|
@ -342,9 +342,6 @@ extern char *EFHNToStr();
|
|||
extern int EFGetPortMax();
|
||||
|
||||
/* ------------------------- constants used by clients -------------- */
|
||||
/* This gives us a 32 or 64 dev types which should be ok */
|
||||
#define BITSPERCHAR 8
|
||||
#define MAXDEVTYPES (sizeof(long)*BITSPERCHAR)
|
||||
|
||||
/*
|
||||
* ANSI C definitions of arguments to EFvisit procedures
|
||||
|
|
|
|||
|
|
@ -109,12 +109,12 @@ ExtResisForDef(celldef, resisdata)
|
|||
idx = 0;
|
||||
while (ExtGetDevInfo(idx++, &devname, NULL, NULL, NULL, NULL, NULL))
|
||||
{
|
||||
if (idx == MAXDEVTYPES)
|
||||
if (idx == TT_MAXTYPES)
|
||||
{
|
||||
TxError("Error: Ran out of space for device types!\n");
|
||||
break;
|
||||
}
|
||||
efBuildAddStr(EFDevTypes, &EFDevNumTypes, MAXDEVTYPES, devname);
|
||||
efBuildAddStr(EFDevTypes, &EFDevNumTypes, TT_MAXTYPES, devname);
|
||||
}
|
||||
|
||||
HashInit(&ResNodeTable, INITFLATSIZE, HT_STRINGKEYS);
|
||||
|
|
|
|||
Loading…
Reference in New Issue