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)];
|
||||
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);
|
||||
(void) DBSrPaintArea((Tile *) NULL, plane, rect, &mask,
|
||||
ResAddBreakpointFunc, (ClientData)node);
|
||||
|
|
|
|||
211
resis/ResPrint.c
211
resis/ResPrint.c
|
|
@ -48,52 +48,52 @@ extern ResSimNode *ResInitializeNode();
|
|||
*/
|
||||
|
||||
void
|
||||
ResPrintExtRes(outextfile,resistors,nodename)
|
||||
FILE *outextfile;
|
||||
resResistor *resistors;
|
||||
char *nodename;
|
||||
ResPrintExtRes(outextfile, resistors, nodename)
|
||||
FILE *outextfile;
|
||||
resResistor *resistors;
|
||||
char *nodename;
|
||||
|
||||
{
|
||||
int nodenum=0;
|
||||
char newname[MAXNAME];
|
||||
HashEntry *entry;
|
||||
ResSimNode *node,*ResInitializeNode();
|
||||
int nodenum=0;
|
||||
char newname[MAXNAME];
|
||||
HashEntry *entry;
|
||||
ResSimNode *node, *ResInitializeNode();
|
||||
|
||||
for (; resistors != NULL; resistors=resistors->rr_nextResistor)
|
||||
{
|
||||
/*
|
||||
These names shouldn't be null; they should either be set by
|
||||
the device name or by the node printing routine. This
|
||||
code is included in case the resistor network is printed
|
||||
before the nodes.
|
||||
*/
|
||||
if (resistors->rr_connection1->rn_name == NULL)
|
||||
{
|
||||
(void)sprintf(newname,"%s%s%d",nodename,".r",nodenum++);
|
||||
entry = HashFind(&ResNodeTable,newname);
|
||||
node = ResInitializeNode(entry);
|
||||
resistors->rr_connection1->rn_name = node->name;
|
||||
node->oldname = nodename;
|
||||
}
|
||||
if (resistors->rr_connection2->rn_name == NULL)
|
||||
{
|
||||
(void)sprintf(newname,"%s%s%d",nodename,".r",nodenum++);
|
||||
entry = HashFind(&ResNodeTable,newname);
|
||||
node = ResInitializeNode(entry);
|
||||
resistors->rr_connection2->rn_name = node->name;
|
||||
node->oldname = nodename;
|
||||
}
|
||||
if (ResOptionsFlags & ResOpt_DoExtFile)
|
||||
{
|
||||
fprintf(outextfile, "resist \"%s\" \"%s\" %g\n",
|
||||
for (; resistors != NULL; resistors = resistors->rr_nextResistor)
|
||||
{
|
||||
/*
|
||||
* These names shouldn't be null; they should either be set by
|
||||
* the device name or by the node printing routine. This
|
||||
* code is included in case the resistor network is printed
|
||||
* before the nodes.
|
||||
*/
|
||||
|
||||
if (resistors->rr_connection1->rn_name == NULL)
|
||||
{
|
||||
(void)sprintf(newname, "%s%s%d", nodename, ".r", nodenum++);
|
||||
entry = HashFind(&ResNodeTable, newname);
|
||||
node = ResInitializeNode(entry);
|
||||
resistors->rr_connection1->rn_name = node->name;
|
||||
node->oldname = nodename;
|
||||
}
|
||||
if (resistors->rr_connection2->rn_name == NULL)
|
||||
{
|
||||
(void)sprintf(newname, "%s%s%d", nodename, ".r", nodenum++);
|
||||
entry = HashFind(&ResNodeTable, newname);
|
||||
node = ResInitializeNode(entry);
|
||||
resistors->rr_connection2->rn_name = node->name;
|
||||
node->oldname = nodename;
|
||||
}
|
||||
if (ResOptionsFlags & ResOpt_DoExtFile)
|
||||
{
|
||||
fprintf(outextfile, "resist \"%s\" \"%s\" %g\n",
|
||||
resistors->rr_connection1->rn_name,
|
||||
resistors->rr_connection2->rn_name,
|
||||
resistors->rr_value / (float)ExtCurStyle->exts_resistScale);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
|
|
@ -205,65 +205,64 @@ ResPrintExtNode(outextfile, nodelist, nodename)
|
|||
FILE *outextfile;
|
||||
resNode *nodelist;
|
||||
char *nodename;
|
||||
|
||||
{
|
||||
int nodenum=0;
|
||||
char newname[MAXNAME],tmpname[MAXNAME],*cp;
|
||||
HashEntry *entry;
|
||||
ResSimNode *node,*ResInitializeNode();
|
||||
bool DoKillNode = TRUE;
|
||||
resNode *snode = nodelist;
|
||||
int nodenum = 0;
|
||||
char newname[MAXNAME], tmpname[MAXNAME], *cp;
|
||||
HashEntry *entry;
|
||||
ResSimNode *node, *ResInitializeNode();
|
||||
bool DoKillNode = TRUE;
|
||||
resNode *snode = nodelist;
|
||||
|
||||
/* 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. */
|
||||
/* 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. */
|
||||
|
||||
for (; nodelist != NULL; nodelist = nodelist->rn_more)
|
||||
for (; nodelist != NULL; nodelist = nodelist->rn_more)
|
||||
{
|
||||
if (nodelist->rn_name != NULL)
|
||||
if (!strcmp(nodelist->rn_name, nodename))
|
||||
{
|
||||
DoKillNode = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((ResOptionsFlags & ResOpt_DoExtFile) && DoKillNode)
|
||||
{
|
||||
fprintf(outextfile,"killnode \"%s\"\n",nodename);
|
||||
}
|
||||
if ((ResOptionsFlags & ResOpt_DoExtFile) && DoKillNode)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (snode->rn_name == NULL)
|
||||
{
|
||||
(void)sprintf(tmpname,"%s",nodename);
|
||||
for (; snode != NULL; snode = snode->rn_more)
|
||||
{
|
||||
if (snode->rn_name == NULL)
|
||||
{
|
||||
(void)sprintf(tmpname,"%s",nodename);
|
||||
|
||||
cp = tmpname + strlen(tmpname) - 1;
|
||||
if (*cp == '!' || *cp == '#') *cp = '\0';
|
||||
cp = tmpname + strlen(tmpname) - 1;
|
||||
if (*cp == '!' || *cp == '#') *cp = '\0';
|
||||
|
||||
(void)sprintf(newname,"%s%s%d",tmpname,".n",nodenum++);
|
||||
entry = HashFind(&ResNodeTable,newname);
|
||||
node = ResInitializeNode(entry);
|
||||
snode->rn_name = node->name;
|
||||
node->oldname = nodename;
|
||||
}
|
||||
(void)sprintf(newname, "%s%s%d", tmpname, ".n", nodenum++);
|
||||
entry = HashFind(&ResNodeTable, newname);
|
||||
node = ResInitializeNode(entry);
|
||||
snode->rn_name = node->name;
|
||||
node->oldname = nodename;
|
||||
}
|
||||
|
||||
if (ResOptionsFlags & ResOpt_DoExtFile)
|
||||
{
|
||||
/* rnode name R C x y type (R is always 0) */
|
||||
fprintf(outextfile, "rnode \"%s\" 0 %g %d %d %d\n",
|
||||
if (ResOptionsFlags & ResOpt_DoExtFile)
|
||||
{
|
||||
/* rnode name R C x y type (R is always 0) */
|
||||
fprintf(outextfile, "rnode \"%s\" 0 %g %d %d %d\n",
|
||||
snode->rn_name,
|
||||
(snode->rn_float.rn_area/
|
||||
ExtCurStyle->exts_capScale),
|
||||
(snode->rn_float.rn_area / ExtCurStyle->exts_capScale),
|
||||
snode->rn_loc.p_x,
|
||||
snode->rn_loc.p_y,
|
||||
/* the following is TEMPORARILY set to 0 */
|
||||
0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
|
|
@ -279,39 +278,39 @@ ResPrintExtNode(outextfile, nodelist, nodename)
|
|||
*/
|
||||
|
||||
void
|
||||
ResPrintStats(goodies,name)
|
||||
ResGlobalParams *goodies;
|
||||
char *name;
|
||||
ResPrintStats(goodies, name)
|
||||
ResGlobalParams *goodies;
|
||||
char *name;
|
||||
{
|
||||
static int totalnets=0,totalnodes=0,totalresistors=0;
|
||||
int nodes,resistors;
|
||||
resNode *node;
|
||||
resResistor *res;
|
||||
static int totalnets = 0, totalnodes = 0, totalresistors = 0;
|
||||
int nodes, resistors;
|
||||
resNode *node;
|
||||
resResistor *res;
|
||||
|
||||
if (goodies == NULL)
|
||||
{
|
||||
if (goodies == NULL)
|
||||
{
|
||||
TxError("nets:%d nodes:%d resistors:%d\n",
|
||||
totalnets,totalnodes,totalresistors);
|
||||
totalnets=0;
|
||||
totalnodes=0;
|
||||
totalresistors=0;
|
||||
return;
|
||||
}
|
||||
nodes=0;
|
||||
resistors=0;
|
||||
totalnets++;
|
||||
for (node = ResNodeList; node != NULL; node=node->rn_more)
|
||||
totalnets, totalnodes, totalresistors);
|
||||
totalnets = 0;
|
||||
totalnodes = 0;
|
||||
totalresistors = 0;
|
||||
return;
|
||||
}
|
||||
nodes = 0;
|
||||
resistors = 0;
|
||||
totalnets++;
|
||||
for (node = ResNodeList; node != NULL; node=node->rn_more)
|
||||
|
||||
{
|
||||
nodes++;
|
||||
totalnodes++;
|
||||
}
|
||||
for (res = ResResList; res != NULL; res=res->rr_nextResistor)
|
||||
{
|
||||
resistors++;
|
||||
totalresistors++;
|
||||
}
|
||||
TxError("%s %d %d\n",name,nodes,resistors);
|
||||
{
|
||||
nodes++;
|
||||
totalnodes++;
|
||||
}
|
||||
for (res = ResResList; res != NULL; res=res->rr_nextResistor)
|
||||
{
|
||||
resistors++;
|
||||
totalresistors++;
|
||||
}
|
||||
TxError("%s %d %d\n", name, nodes, resistors);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -326,8 +325,8 @@ ResPrintStats(goodies,name)
|
|||
|
||||
void
|
||||
resWriteNodeName(fp, nodeptr)
|
||||
FILE *fp;
|
||||
resNode *nodeptr;
|
||||
FILE *fp;
|
||||
resNode *nodeptr;
|
||||
{
|
||||
if (nodeptr->rn_name == NULL)
|
||||
fprintf(fp, "N%d", nodeptr->rn_id);
|
||||
|
|
|
|||
Loading…
Reference in New Issue