Fixed a problem with extraction. If an extraction line specifies

one terminal of a device as the substrate, but also specifies
shielding types for the substrate, then the extraction cannot just
assume that a missing terminal is connected to the substrate without
first checking that there are no substrate shielding types under the
device.
This commit is contained in:
Tim Edwards 2020-12-21 10:10:18 -05:00
parent 5f64c2b3d7
commit a660d73d5a
2 changed files with 17 additions and 4 deletions

View File

@ -1 +1 @@
8.3.100
8.3.101

View File

@ -1741,7 +1741,8 @@ extOutputDevices(def, transList, outFile)
}
break; /* End of SD terminals */
}
else if (!TTMaskIntersect(tmask, &DBPlaneTypes[reg->treg_pnum]))
else if (!TTMaskIntersect(tmask, &DBPlaneTypes[reg->treg_pnum])
|| (TTMaskHasType(tmask, TT_SPACE)))
{
node = NULL;
extTransFindSubs(reg->treg_tile, t, tmask, def, &node, NULL);
@ -1755,8 +1756,20 @@ extOutputDevices(def, transList, outFile)
extTransRec.tr_termnode[termcount] = node;
}
else if (TTMaskHasType(tmask, TT_SPACE)) {
/* Device node is specified as being the substrate */
if (glob_subsnode == NULL) {
/* Device node is possibly the substrate. But: Note that */
/* TT_SPACE in the mask covers all planes, and it is not */
/* possible to specify TT_SPACE in a single plane. So it */
/* is necessary to check for any shielding types that */
/* block the substrate. */
node = NULL;
if (!TTMaskIsZero(&ExtCurStyle->exts_globSubstrateShieldTypes))
{
extTransFindSubs(reg->treg_tile, t,
&ExtCurStyle->exts_globSubstrateShieldTypes,
def, &node, NULL);
}
if ((glob_subsnode == NULL) || (node != NULL)) {
/* See if there is another matching device record */
/* with a different terminal type, and try again. */
devptr = extDevFindMatch(devptr, t);