diff --git a/calma/CalmaWrite.c b/calma/CalmaWrite.c index 5a01d85b..8a8842f3 100644 --- a/calma/CalmaWrite.c +++ b/calma/CalmaWrite.c @@ -487,7 +487,7 @@ calmaDumpStructure(def, outf, calmaDefHash, filename) HashSetValue(he, (char *)newnameptr); } } - calmaOutStringRecord(CALMA_STRNAME, newnameptr, outf); + calmaOutStringRecord(CALMA_STRNAME, newnameptr + 1, outf); } freeMagic(strname); diff --git a/drc/DRCcif.c b/drc/DRCcif.c index 6fe7321b..b4344620 100644 --- a/drc/DRCcif.c +++ b/drc/DRCcif.c @@ -200,7 +200,7 @@ drcCifWidth(argc, argv) dpnext = drcCifRules[thislayer][DRC_CIF_SPACE]; dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); - drcAssign(dpnew, centidistance, dpnext, &CIFSolidBits, + drcCifAssign(dpnew, centidistance, dpnext, &CIFSolidBits, &CIFSolidBits, why, centidistance, DRC_FORWARD, thislayer, 0); drcCifRules[thislayer][DRC_CIF_SPACE] = dpnew; @@ -292,7 +292,7 @@ drcCifSpacing(argc, argv) centidistance *= drcCifStyle->cs_expander; // BSI dpnext = drcCifRules[layer[0]][DRC_CIF_SOLID]; dpnew = (DRCCookie *) mallocMagic((unsigned) sizeof (DRCCookie)); - drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, + drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, why, centidistance, DRC_FORWARD, layer[1], 0); drcCifRules[layer[0]][DRC_CIF_SOLID] = dpnew; if (needReverse) dpnew->drcc_flags |= DRC_BOTHCORNERS; @@ -300,7 +300,7 @@ drcCifSpacing(argc, argv) // Add rule in reverse direction dpnext = drcCifRules[layer[0]][DRC_CIF_SPACE]; dpnew = (DRCCookie *) mallocMagic((unsigned) sizeof (DRCCookie)); - drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, + drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, why, centidistance, DRC_REVERSE, layer[1], 0); drcCifRules[layer[0]][DRC_CIF_SPACE] = dpnew; @@ -312,14 +312,14 @@ drcCifSpacing(argc, argv) dpnew->drcc_flags |= DRC_BOTHCORNERS; dpnext = drcCifRules[layer[1]][DRC_CIF_SOLID]; dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); - drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, + drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, why, centidistance, DRC_FORWARD|DRC_BOTHCORNERS, layer[0], 0); drcCifRules[layer[1]][DRC_CIF_SOLID] = dpnew; // Add rule in reverse direction dpnext = drcCifRules[layer[1]][DRC_CIF_SPACE]; dpnew = (DRCCookie *) mallocMagic((unsigned) sizeof (DRCCookie)); - drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, + drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, why, centidistance, DRC_REVERSE|DRC_BOTHCORNERS, layer[0], 0); drcCifRules[layer[1]][DRC_CIF_SPACE] = dpnew; @@ -327,14 +327,14 @@ drcCifSpacing(argc, argv) { dpnext = drcCifRules[layer[1]][DRC_CIF_SPACE]; dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); - drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, + drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, why, centidistance, DRC_REVERSE | DRC_BOTHCORNERS, layer[0], 0); drcCifRules[layer[1]][DRC_CIF_SPACE] = dpnew; dpnext = drcCifRules[layer[0]][DRC_CIF_SPACE]; dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); - drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, + drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, why, centidistance, DRC_REVERSE | DRC_BOTHCORNERS, layer[1], 0); drcCifRules[layer[0]][DRC_CIF_SPACE] = dpnew; @@ -345,13 +345,13 @@ drcCifSpacing(argc, argv) { dpnext = drcCifRules[layer[1]][DRC_CIF_SPACE]; dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); - drcAssign(dpnew, scalefactor, dpnext, &DBSpaceBits, &DBZeroTypeBits, + drcCifAssign(dpnew, scalefactor, dpnext, &DBSpaceBits, &DBZeroTypeBits, why, scalefactor, DRC_FORWARD, layer[0], 0); drcCifRules[layer[1]][DRC_CIF_SPACE] = dpnew; dpnext = drcCifRules[layer[0]][DRC_CIF_SPACE]; dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); - drcAssign(dpnew, scalefactor, dpnext, &DBSpaceBits, &DBZeroTypeBits, + drcCifAssign(dpnew, scalefactor, dpnext, &DBSpaceBits, &DBZeroTypeBits, why, scalefactor, DRC_FORWARD, layer[1], 0); drcCifRules[layer[0]][DRC_CIF_SPACE] = dpnew; } @@ -1066,7 +1066,7 @@ drcCifArea(argc, argv) centiarea *= (drcCifStyle->cs_expander * drcCifStyle->cs_expander); dpnext = drcCifRules[thislayer][DRC_CIF_SPACE]; dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); - drcAssign(dpnew, centihorizon, dpnext, &CIFSolidBits, &CIFSolidBits, + drcCifAssign(dpnew, centihorizon, dpnext, &CIFSolidBits, &CIFSolidBits, why, centiarea, DRC_AREA | DRC_FORWARD, thislayer, 0); drcCifRules[thislayer][DRC_CIF_SPACE] = dpnew; @@ -1136,11 +1136,10 @@ drcCifMaxwidth(argc, argv) centidistance *= drcCifStyle->cs_expander; // BSI dpnext = drcCifRules[thislayer][DRC_CIF_SPACE]; dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); - drcAssign(dpnew, centidistance, dpnext, &CIFSolidBits, &CIFSolidBits, + drcCifAssign(dpnew, centidistance, dpnext, &CIFSolidBits, &CIFSolidBits, why, centidistance, DRC_MAXWIDTH | bend, thislayer, 0); drcCifRules[thislayer][DRC_CIF_SPACE] = dpnew; - return ((centidistance+scalefactor-1)/scalefactor); } diff --git a/drc/DRCtech.c b/drc/DRCtech.c index 62c09066..dd49a0d4 100644 --- a/drc/DRCtech.c +++ b/drc/DRCtech.c @@ -872,17 +872,13 @@ DRCTechLine(sectionName, argc, argv) } void -drcAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto, planefrom) +drcCifAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto, planefrom) DRCCookie *cookie, *next; int dist, cdist; TileTypeBitMask *mask, *corner; char *why; int flags, planeto, planefrom; { - /* Diagnostic */ - if (planeto >= DBNumPlanes) { - TxError("Bad plane in DRC assign!\n"); - } (cookie)->drcc_dist = dist; (cookie)->drcc_next = next; (cookie)->drcc_mask = *mask; @@ -896,6 +892,27 @@ drcAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto, planefro (cookie)->drcc_cmod = 0; } +// This is like drcCifAssign, but checks for bad plane numbers in planeto and +// planefrom + +void +drcAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto, planefrom) + DRCCookie *cookie, *next; + int dist, cdist; + TileTypeBitMask *mask, *corner; + char *why; + int flags, planeto, planefrom; +{ + /* Diagnostic */ + if (planeto >= DBNumPlanes) + TechError("Bad plane in DRC assignment.\n"); + if (planefrom >= DBNumPlanes) + TechError("Bad edge plane in DRC assignment.\n"); + + drcCifAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto, + planefrom); +} + /* * ---------------------------------------------------------------------------- * diff --git a/drc/drc.h b/drc/drc.h index 0ca8847a..e2dea941 100644 --- a/drc/drc.h +++ b/drc/drc.h @@ -239,6 +239,8 @@ extern void drcPrintError(); extern int drcIncludeArea(); extern int drcExactOverlapTile(); extern void drcInitRulesTbl(); +extern void drcAssign(); +extern void drcCifAssign(); /* * Exported procedures