The "extresist" command was still generating "Couldn't find wire"
messages which was traced to code that changes a drivepoint position to match a label; the same drivepoint may be part of the record for the initial position to search on the net, in which case if the position is changed, then the tile type needs to be changed to match the new position.
This commit is contained in:
parent
bb8f7e6960
commit
34af2f3309
|
|
@ -268,8 +268,9 @@ ResMakePortBreakpoints(def)
|
|||
*----------------------------------------------------------------------------
|
||||
*/
|
||||
void
|
||||
ResMakeLabelBreakpoints(def)
|
||||
ResMakeLabelBreakpoints(def, goodies)
|
||||
CellDef *def;
|
||||
ResGlobalParams *goodies;
|
||||
{
|
||||
Plane *plane;
|
||||
Rect *rect;
|
||||
|
|
@ -284,6 +285,13 @@ ResMakeLabelBreakpoints(def)
|
|||
entry = HashFind(&ResNodeTable, slab->lab_text);
|
||||
node = ResInitializeNode(entry);
|
||||
|
||||
/* If the drivepoint position changes and the drivepoint is */
|
||||
/* in the "goodies" record, then make sure the tile type in */
|
||||
/* "goodies" gets changed to match. */
|
||||
|
||||
if (goodies->rg_devloc == &node->drivepoint)
|
||||
goodies->rg_ttype = slab->lab_type;
|
||||
|
||||
node->drivepoint = slab->lab_rect.r_ll;
|
||||
node->rs_bbox = slab->lab_rect;
|
||||
node->location = slab->lab_rect.r_ll;
|
||||
|
|
@ -1054,7 +1062,7 @@ ResExtractNet(node, goodies, cellname)
|
|||
/* Finish preprocessing. */
|
||||
|
||||
ResMakePortBreakpoints(ResUse->cu_def);
|
||||
ResMakeLabelBreakpoints(ResUse->cu_def);
|
||||
ResMakeLabelBreakpoints(ResUse->cu_def, goodies);
|
||||
ResFindNewContactTiles(ResContactList);
|
||||
ResPreProcessDevices(DevTiles, ResDevList, ResUse->cu_def);
|
||||
|
||||
|
|
|
|||
126
resis/ResRex.c
126
resis/ResRex.c
|
|
@ -1507,130 +1507,6 @@ ResFixDevName(line, type, device, layoutnode)
|
|||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
/*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
* Deprecated function. Horribly inefficient. See qsort() version below.
|
||||
* (Not yet implemented; still under test.)
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
ResSortByGate(DevpointerList)
|
||||
devPtr **DevpointerList;
|
||||
{
|
||||
int changed = TRUE;
|
||||
int localchange = TRUE;
|
||||
devPtr *working, *current;
|
||||
devPtr *last = NULL, *gatelist = NULL;
|
||||
|
||||
/* Split out GATE entries into separate list (gatelist) */
|
||||
|
||||
working = *DevpointerList;
|
||||
while (working != NULL)
|
||||
{
|
||||
if (working->terminal == GATE)
|
||||
{
|
||||
current = working;
|
||||
working = working->nextDev;
|
||||
if (last == NULL)
|
||||
{
|
||||
*DevpointerList = working;
|
||||
}
|
||||
else
|
||||
{
|
||||
last->nextDev = working;
|
||||
}
|
||||
current->nextDev = gatelist;
|
||||
gatelist = current;
|
||||
}
|
||||
else
|
||||
{
|
||||
last = working;
|
||||
working = working->nextDev;
|
||||
}
|
||||
}
|
||||
|
||||
/* Sort the SOURCE and DRAIN list (DevpointerList) */
|
||||
|
||||
while (changed == TRUE)
|
||||
{
|
||||
changed = localchange = FALSE;
|
||||
working = *DevpointerList;
|
||||
last = NULL;
|
||||
while (working != NULL && (current = working->nextDev) != NULL)
|
||||
{
|
||||
RDev *w = working->thisDev;
|
||||
RDev *c = current->thisDev;
|
||||
|
||||
if (w->gate > c->gate)
|
||||
{
|
||||
changed = TRUE;
|
||||
localchange = TRUE;
|
||||
}
|
||||
else if (w->gate == c->gate &&
|
||||
(working->terminal == SOURCE &&
|
||||
current->terminal == SOURCE &&
|
||||
w->drain > c->drain ||
|
||||
working->terminal == SOURCE &&
|
||||
current->terminal == DRAIN &&
|
||||
w->drain > c->source ||
|
||||
working->terminal == DRAIN &&
|
||||
current->terminal == SOURCE &&
|
||||
w->source > c->drain ||
|
||||
working->terminal == DRAIN &&
|
||||
current->terminal == DRAIN &&
|
||||
w->source > c->source))
|
||||
{
|
||||
changed = TRUE;
|
||||
localchange = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
last = working;
|
||||
working = working->nextDev;
|
||||
continue;
|
||||
}
|
||||
if (localchange)
|
||||
{
|
||||
localchange = FALSE;
|
||||
if (last == NULL)
|
||||
{
|
||||
*DevpointerList = current;
|
||||
}
|
||||
else
|
||||
{
|
||||
last->nextDev = current;
|
||||
}
|
||||
working->nextDev = current->nextDev;
|
||||
current->nextDev = working;
|
||||
last = current;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Add the GATE list back to the end of DevpointerList */
|
||||
|
||||
if (working == NULL)
|
||||
{
|
||||
*DevpointerList = gatelist;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (working->nextDev != NULL)
|
||||
TxError("Bad Device pointer in sort\n");
|
||||
else
|
||||
working->nextDev = gatelist;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* 0 */
|
||||
|
||||
#if 1
|
||||
|
||||
/*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
|
|
@ -1730,8 +1606,6 @@ ResSortByGate(DevpointerList)
|
|||
freeMagic(Devindexed);
|
||||
}
|
||||
|
||||
#endif /* 1 */
|
||||
|
||||
/*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue