Corrected an error in extresist that caused it to lose track of any
port that has zero area for the label rectangle.
This commit is contained in:
parent
94a6daa9b0
commit
693256c373
|
|
@ -217,6 +217,18 @@ ResMakePortBreakpoints(def)
|
||||||
plane = def->cd_planes[DBPlane(node->rs_ttype)];
|
plane = def->cd_planes[DBPlane(node->rs_ttype)];
|
||||||
rect = &(node->rs_bbox);
|
rect = &(node->rs_bbox);
|
||||||
|
|
||||||
|
/* Beware of zero-area ports */
|
||||||
|
if (rect->r_xbot == rect->r_xtop)
|
||||||
|
{
|
||||||
|
rect->r_xbot--;
|
||||||
|
rect->r_xtop++;
|
||||||
|
}
|
||||||
|
if (rect->r_ybot == rect->r_ytop)
|
||||||
|
{
|
||||||
|
rect->r_ybot--;
|
||||||
|
rect->r_ytop++;
|
||||||
|
}
|
||||||
|
|
||||||
TTMaskSetOnlyType(&mask, node->rs_ttype);
|
TTMaskSetOnlyType(&mask, node->rs_ttype);
|
||||||
(void) DBSrPaintArea((Tile *) NULL, plane, rect, &mask,
|
(void) DBSrPaintArea((Tile *) NULL, plane, rect, &mask,
|
||||||
ResAddBreakpointFunc, (ClientData)node);
|
ResAddBreakpointFunc, (ClientData)node);
|
||||||
|
|
|
||||||
211
resis/ResPrint.c
211
resis/ResPrint.c
|
|
@ -48,52 +48,52 @@ extern ResSimNode *ResInitializeNode();
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
ResPrintExtRes(outextfile,resistors,nodename)
|
ResPrintExtRes(outextfile, resistors, nodename)
|
||||||
FILE *outextfile;
|
FILE *outextfile;
|
||||||
resResistor *resistors;
|
resResistor *resistors;
|
||||||
char *nodename;
|
char *nodename;
|
||||||
|
|
||||||
{
|
{
|
||||||
int nodenum=0;
|
int nodenum=0;
|
||||||
char newname[MAXNAME];
|
char newname[MAXNAME];
|
||||||
HashEntry *entry;
|
HashEntry *entry;
|
||||||
ResSimNode *node,*ResInitializeNode();
|
ResSimNode *node, *ResInitializeNode();
|
||||||
|
|
||||||
for (; resistors != NULL; resistors=resistors->rr_nextResistor)
|
for (; resistors != NULL; resistors = resistors->rr_nextResistor)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
These names shouldn't be null; they should either be set by
|
* These names shouldn't be null; they should either be set by
|
||||||
the device name or by the node printing routine. This
|
* the device name or by the node printing routine. This
|
||||||
code is included in case the resistor network is printed
|
* code is included in case the resistor network is printed
|
||||||
before the nodes.
|
* before the nodes.
|
||||||
*/
|
*/
|
||||||
if (resistors->rr_connection1->rn_name == NULL)
|
|
||||||
{
|
if (resistors->rr_connection1->rn_name == NULL)
|
||||||
(void)sprintf(newname,"%s%s%d",nodename,".r",nodenum++);
|
{
|
||||||
entry = HashFind(&ResNodeTable,newname);
|
(void)sprintf(newname, "%s%s%d", nodename, ".r", nodenum++);
|
||||||
node = ResInitializeNode(entry);
|
entry = HashFind(&ResNodeTable, newname);
|
||||||
resistors->rr_connection1->rn_name = node->name;
|
node = ResInitializeNode(entry);
|
||||||
node->oldname = nodename;
|
resistors->rr_connection1->rn_name = node->name;
|
||||||
}
|
node->oldname = nodename;
|
||||||
if (resistors->rr_connection2->rn_name == NULL)
|
}
|
||||||
{
|
if (resistors->rr_connection2->rn_name == NULL)
|
||||||
(void)sprintf(newname,"%s%s%d",nodename,".r",nodenum++);
|
{
|
||||||
entry = HashFind(&ResNodeTable,newname);
|
(void)sprintf(newname, "%s%s%d", nodename, ".r", nodenum++);
|
||||||
node = ResInitializeNode(entry);
|
entry = HashFind(&ResNodeTable, newname);
|
||||||
resistors->rr_connection2->rn_name = node->name;
|
node = ResInitializeNode(entry);
|
||||||
node->oldname = nodename;
|
resistors->rr_connection2->rn_name = node->name;
|
||||||
}
|
node->oldname = nodename;
|
||||||
if (ResOptionsFlags & ResOpt_DoExtFile)
|
}
|
||||||
{
|
if (ResOptionsFlags & ResOpt_DoExtFile)
|
||||||
fprintf(outextfile, "resist \"%s\" \"%s\" %g\n",
|
{
|
||||||
|
fprintf(outextfile, "resist \"%s\" \"%s\" %g\n",
|
||||||
resistors->rr_connection1->rn_name,
|
resistors->rr_connection1->rn_name,
|
||||||
resistors->rr_connection2->rn_name,
|
resistors->rr_connection2->rn_name,
|
||||||
resistors->rr_value / (float)ExtCurStyle->exts_resistScale);
|
resistors->rr_value / (float)ExtCurStyle->exts_resistScale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
|
|
@ -205,65 +205,64 @@ ResPrintExtNode(outextfile, nodelist, nodename)
|
||||||
FILE *outextfile;
|
FILE *outextfile;
|
||||||
resNode *nodelist;
|
resNode *nodelist;
|
||||||
char *nodename;
|
char *nodename;
|
||||||
|
|
||||||
{
|
{
|
||||||
int nodenum=0;
|
int nodenum = 0;
|
||||||
char newname[MAXNAME],tmpname[MAXNAME],*cp;
|
char newname[MAXNAME], tmpname[MAXNAME], *cp;
|
||||||
HashEntry *entry;
|
HashEntry *entry;
|
||||||
ResSimNode *node,*ResInitializeNode();
|
ResSimNode *node, *ResInitializeNode();
|
||||||
bool DoKillNode = TRUE;
|
bool DoKillNode = TRUE;
|
||||||
resNode *snode = nodelist;
|
resNode *snode = nodelist;
|
||||||
|
|
||||||
/* If any of the subnode names match the original node name, then */
|
/* If any of the subnode names match the original node name, then */
|
||||||
/* we don't want to rip out that node with a "killnode" statement. */
|
/* we don't want to rip out that node with a "killnode" statement. */
|
||||||
|
|
||||||
for (; nodelist != NULL; nodelist = nodelist->rn_more)
|
for (; nodelist != NULL; nodelist = nodelist->rn_more)
|
||||||
|
{
|
||||||
if (nodelist->rn_name != NULL)
|
if (nodelist->rn_name != NULL)
|
||||||
if (!strcmp(nodelist->rn_name, nodename))
|
if (!strcmp(nodelist->rn_name, nodename))
|
||||||
{
|
{
|
||||||
DoKillNode = FALSE;
|
DoKillNode = FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((ResOptionsFlags & ResOpt_DoExtFile) && DoKillNode)
|
if ((ResOptionsFlags & ResOpt_DoExtFile) && DoKillNode)
|
||||||
{
|
{
|
||||||
fprintf(outextfile,"killnode \"%s\"\n",nodename);
|
fprintf(outextfile, "killnode \"%s\"\n", nodename);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create "rnode" entries for each subnode */
|
/* Create "rnode" entries for each subnode */
|
||||||
|
|
||||||
for (; snode != NULL; snode = snode->rn_more)
|
for (; snode != NULL; snode = snode->rn_more)
|
||||||
{
|
{
|
||||||
if (snode->rn_name == NULL)
|
if (snode->rn_name == NULL)
|
||||||
{
|
{
|
||||||
(void)sprintf(tmpname,"%s",nodename);
|
(void)sprintf(tmpname,"%s",nodename);
|
||||||
|
|
||||||
cp = tmpname + strlen(tmpname) - 1;
|
cp = tmpname + strlen(tmpname) - 1;
|
||||||
if (*cp == '!' || *cp == '#') *cp = '\0';
|
if (*cp == '!' || *cp == '#') *cp = '\0';
|
||||||
|
|
||||||
(void)sprintf(newname,"%s%s%d",tmpname,".n",nodenum++);
|
(void)sprintf(newname, "%s%s%d", tmpname, ".n", nodenum++);
|
||||||
entry = HashFind(&ResNodeTable,newname);
|
entry = HashFind(&ResNodeTable, newname);
|
||||||
node = ResInitializeNode(entry);
|
node = ResInitializeNode(entry);
|
||||||
snode->rn_name = node->name;
|
snode->rn_name = node->name;
|
||||||
node->oldname = nodename;
|
node->oldname = nodename;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ResOptionsFlags & ResOpt_DoExtFile)
|
if (ResOptionsFlags & ResOpt_DoExtFile)
|
||||||
{
|
{
|
||||||
/* rnode name R C x y type (R is always 0) */
|
/* rnode name R C x y type (R is always 0) */
|
||||||
fprintf(outextfile, "rnode \"%s\" 0 %g %d %d %d\n",
|
fprintf(outextfile, "rnode \"%s\" 0 %g %d %d %d\n",
|
||||||
snode->rn_name,
|
snode->rn_name,
|
||||||
(snode->rn_float.rn_area/
|
(snode->rn_float.rn_area / ExtCurStyle->exts_capScale),
|
||||||
ExtCurStyle->exts_capScale),
|
|
||||||
snode->rn_loc.p_x,
|
snode->rn_loc.p_x,
|
||||||
snode->rn_loc.p_y,
|
snode->rn_loc.p_y,
|
||||||
/* the following is TEMPORARILY set to 0 */
|
/* the following is TEMPORARILY set to 0 */
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
|
|
@ -279,39 +278,39 @@ ResPrintExtNode(outextfile, nodelist, nodename)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
ResPrintStats(goodies,name)
|
ResPrintStats(goodies, name)
|
||||||
ResGlobalParams *goodies;
|
ResGlobalParams *goodies;
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
static int totalnets=0,totalnodes=0,totalresistors=0;
|
static int totalnets = 0, totalnodes = 0, totalresistors = 0;
|
||||||
int nodes,resistors;
|
int nodes, resistors;
|
||||||
resNode *node;
|
resNode *node;
|
||||||
resResistor *res;
|
resResistor *res;
|
||||||
|
|
||||||
if (goodies == NULL)
|
if (goodies == NULL)
|
||||||
{
|
{
|
||||||
TxError("nets:%d nodes:%d resistors:%d\n",
|
TxError("nets:%d nodes:%d resistors:%d\n",
|
||||||
totalnets,totalnodes,totalresistors);
|
totalnets, totalnodes, totalresistors);
|
||||||
totalnets=0;
|
totalnets = 0;
|
||||||
totalnodes=0;
|
totalnodes = 0;
|
||||||
totalresistors=0;
|
totalresistors = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
nodes=0;
|
nodes = 0;
|
||||||
resistors=0;
|
resistors = 0;
|
||||||
totalnets++;
|
totalnets++;
|
||||||
for (node = ResNodeList; node != NULL; node=node->rn_more)
|
for (node = ResNodeList; node != NULL; node=node->rn_more)
|
||||||
|
|
||||||
{
|
{
|
||||||
nodes++;
|
nodes++;
|
||||||
totalnodes++;
|
totalnodes++;
|
||||||
}
|
}
|
||||||
for (res = ResResList; res != NULL; res=res->rr_nextResistor)
|
for (res = ResResList; res != NULL; res=res->rr_nextResistor)
|
||||||
{
|
{
|
||||||
resistors++;
|
resistors++;
|
||||||
totalresistors++;
|
totalresistors++;
|
||||||
}
|
}
|
||||||
TxError("%s %d %d\n",name,nodes,resistors);
|
TxError("%s %d %d\n", name, nodes, resistors);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -326,8 +325,8 @@ ResPrintStats(goodies,name)
|
||||||
|
|
||||||
void
|
void
|
||||||
resWriteNodeName(fp, nodeptr)
|
resWriteNodeName(fp, nodeptr)
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
resNode *nodeptr;
|
resNode *nodeptr;
|
||||||
{
|
{
|
||||||
if (nodeptr->rn_name == NULL)
|
if (nodeptr->rn_name == NULL)
|
||||||
fprintf(fp, "N%d", nodeptr->rn_id);
|
fprintf(fp, "N%d", nodeptr->rn_id);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue