diff --git a/VERSION b/VERSION index 52af7168..373df451 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.582 +8.3.583 diff --git a/database/DBconnect.c b/database/DBconnect.c index 8e1af02d..d5e0fc0f 100644 --- a/database/DBconnect.c +++ b/database/DBconnect.c @@ -828,6 +828,7 @@ dbcConnectLabelFunc(scx, lab, tpath, csa2) CellDef *orig_def = scx->scx_use->cu_def; Label *slab; int lidx = lab->lab_port; + bool foundOne; const TileTypeBitMask *connectMask; /* Check for equivalent ports. For any found, call */ @@ -839,6 +840,7 @@ dbcConnectLabelFunc(scx, lab, tpath, csa2) /* are more equivalent ports, they will be found when */ /* processing this label's area. */ + foundOne = FALSE; for (slab = orig_def->cd_labels; slab != NULL; slab = slab->lab_next) if ((slab->lab_flags & PORT_DIR_MASK) && (slab != lab)) if (slab->lab_port == lidx) @@ -899,6 +901,20 @@ dbcConnectLabelFunc(scx, lab, tpath, csa2) csa2->csa2_list[csa2->csa2_top].connectMask = connectMask; csa2->csa2_list[csa2->csa2_top].dinfo = 0; +#if 0 + /* This warning is useful but currently is generating + * multiple messages per instance and so its more of + * an annoyance than an aid. + */ + + if (foundOne == FALSE) + TxError("Warning: Port %s at location (%d %d) connects" + " a net across multiple disconnected areas!\n", + lab->lab_text, lab->lab_rect.r_xbot, + lab->lab_rect.r_ybot); +#endif + foundOne = TRUE; + /* See above: Process only one equivalent port at a time */ break; } @@ -1247,7 +1263,8 @@ DBTreeCopyConnect(scx, mask, xMask, connect, area, doLabels, destUse) if (DBTreeSrLabels(scx, newmask, xMask, &tpath, searchtype, dbcConnectLabelFunc, (ClientData) &csa2) != 0) { - TxError("Connection search hit memory limit and stopped.\n"); + TxError("Connection search was interrupted or hit " + "memory limit and stopped.\n"); break; } } diff --git a/database/DBio.c b/database/DBio.c index 80353ebc..a31ee7cf 100644 --- a/database/DBio.c +++ b/database/DBio.c @@ -3318,7 +3318,8 @@ dbFindPropGCFFunc(key, value, ggcf) break; else if (numvals != 4) { - TxError("Error: Cannot parse %s property value!\n", key); + TxError("Error: Cannot parse %s property value at \"%s\"!\n", + key, vptr); break; } else @@ -3337,7 +3338,7 @@ dbFindPropGCFFunc(key, value, ggcf) /* Skip forward four values in value */ for (n = 0; n < 4; n++) { - while (!isspace(*vptr)) vptr++; + while (!isspace(*vptr) && (*vptr != '\0')) vptr++; while (isspace(*vptr) && (*vptr != '\0')) vptr++; } } diff --git a/tcltk/magic.tcl.in b/tcltk/magic.tcl.in index 1e78683e..e370afae 100755 --- a/tcltk/magic.tcl.in +++ b/tcltk/magic.tcl.in @@ -373,7 +373,13 @@ if {[info commands magic::openwrapper] != {}} { foreach cellname $celllist { set fext [file extension $cellname] - puts stdout "handling file entry $cellname extension $fext" + switch $fext { + .gz {} + "" {} + default { + puts stdout "Handling file entry $cellname extension $fext" + } + } switch $fext { .lef - .LEF {lef read $cellname} @@ -390,6 +396,16 @@ if {[info commands magic::openwrapper] != {}} { .tcl {source $cellname} .mag - "" {magic::load $cellname} + .gz { + set rootname [file root $cellname] + set fext [file extension $rootname] + puts stdout "Handling compressed entry $cellname extension $fext" + switch $fext { + .gds {gds read $cellname} + .mag {magic::load $cellname} + default {puts stderr "only compressed .mag and .gds are handled."} + } + } default {puts stderr "don't know how to load file $cellname"} } }