diff --git a/drc/DRCbasic.c b/drc/DRCbasic.c index 97448766..7ceca8d2 100644 --- a/drc/DRCbasic.c +++ b/drc/DRCbasic.c @@ -281,7 +281,7 @@ areaCheck(tile, arg) * Side effects: * Calls function for each design-rule violation in celldef * that is triggered by an edge in rect and whose violation - * area falls withing clipRect. This routine makes a flat check: + * area falls within clipRect. This routine makes a flat check: * it considers only information in the paint planes of celldef, * and does not expand children. Function should have the form: * void diff --git a/drc/DRCcontin.c b/drc/DRCcontin.c index 6365db7a..000050a7 100644 --- a/drc/DRCcontin.c +++ b/drc/DRCcontin.c @@ -481,7 +481,7 @@ DRCContinuous() */ while ((DRCPendingRoot != (DRCPendingCookie *)NULL) && DBSrPaintArea ((Tile *) NULL, - DRCPendingRoot->dpc_def->cd_planes [PL_DRC_CHECK], + DRCPendingRoot->dpc_def->cd_planes[PL_DRC_CHECK], &TiPlaneRect, &DBAllButSpaceBits, drcCheckTile, (ClientData) NULL)) { /* check for new user command (without blocking) */ @@ -664,7 +664,7 @@ drcCheckTile(tile, arg) */ /* DRCBasicCheck (celldef, &checkbox, &erasebox, drcPaintError, - (ClientData) drcTempPlane); */ + (ClientData) drcTempPlane); */ /* Check #2: check interactions between paint and subcells, and * also between subcells and other subcells. If any part of a @@ -675,8 +675,8 @@ drcCheckTile(tile, arg) */ DRCErrorType = TT_ERROR_S; - (void) DRCInteractionCheck(celldef, &square, &erasebox, - drcPaintError, (ClientData) drcTempPlane); + (void) DRCInteractionCheck(celldef, &erasebox, drcPaintError, + (ClientData) drcTempPlane); /* Check #3: check for array formation errors in the area. */ diff --git a/drc/DRCmain.c b/drc/DRCmain.c index a9c879f0..ed119de7 100644 --- a/drc/DRCmain.c +++ b/drc/DRCmain.c @@ -530,7 +530,7 @@ drcWhyFunc(scx, cdarg) /* Check paint and interactions in this subcell. */ - (void) DRCInteractionCheck(def, &scx->scx_area, &scx->scx_area, + (void) DRCInteractionCheck(def, &scx->scx_area, (dolist) ? drcListError : drcPrintError, (ClientData) scx); (void) DRCArrayCheck(def, &scx->scx_area, @@ -554,7 +554,7 @@ drcWhyAllFunc(scx, cdarg) /* Check paint and interactions in this subcell. */ - (void) DRCInteractionCheck(def, &scx->scx_area, &scx->scx_area, + (void) DRCInteractionCheck(def, &scx->scx_area, drcListallError, (ClientData)scx); (void) DRCArrayCheck(def, &scx->scx_area, drcListallError, (ClientData)scx); diff --git a/drc/DRCsubcell.c b/drc/DRCsubcell.c index f7f8c159..561845ad 100644 --- a/drc/DRCsubcell.c +++ b/drc/DRCsubcell.c @@ -573,9 +573,8 @@ drcExactOverlapTile(tile, cxp) */ int -DRCInteractionCheck(def, area, erasebox, func, cdarg) +DRCInteractionCheck(def, erasebox, func, cdarg) CellDef *def; /* Definition in which to do check. */ - Rect *area; /* Area in which all errors are to be found. */ Rect *erasebox; /* Smaller area containing DRC check tiles */ void (*func)(); /* Function to call for each error. */ ClientData cdarg; /* Extra info to be passed to func. */ @@ -596,25 +595,25 @@ DRCInteractionCheck(def, area, erasebox, func, cdarg) * square separately. */ - x = (area->r_xbot/DRCStepSize) * DRCStepSize; - if (x > area->r_xbot) x -= DRCStepSize; - y = (area->r_ybot/DRCStepSize) * DRCStepSize; - if (y > area->r_ybot) y -= DRCStepSize; - for (square.r_xbot = x; square.r_xbot < area->r_xtop; + x = (erasebox->r_xbot/DRCStepSize) * DRCStepSize; + if (x > erasebox->r_xbot) x -= DRCStepSize; + y = (erasebox->r_ybot/DRCStepSize) * DRCStepSize; + if (y > erasebox->r_ybot) y -= DRCStepSize; + for (square.r_xbot = x; square.r_xbot < erasebox->r_xtop; square.r_xbot += DRCStepSize) - for (square.r_ybot = y; square.r_ybot < area->r_ytop; + for (square.r_ybot = y; square.r_ybot < erasebox->r_ytop; square.r_ybot += DRCStepSize) { square.r_xtop = square.r_xbot + DRCStepSize; square.r_ytop = square.r_ybot + DRCStepSize; - /* Limit square to area. Otherwise, a huge processing */ + /* Limit square to erasebox. Otherwise, a huge processing */ /* penalty is incurred for finding a single error (e.g., */ /* using "drc find" or "drc why" in a large design with a */ /* large step size. */ cliparea = square; - GeoClip(&cliparea, area); + GeoClip(&cliparea, erasebox); /* Find all the interactions in the square, and clip to the error * area we're interested in. */ diff --git a/drc/DRCtech.c b/drc/DRCtech.c index 034ff029..38798c54 100644 --- a/drc/DRCtech.c +++ b/drc/DRCtech.c @@ -3384,6 +3384,10 @@ drcTechFinalStyle(style) drcScaleUp(style, style->DRCScaleFactorD); drcScaleDown(style, style->DRCScaleFactorN); + /* Scale DRCTechHalo to match */ + DRCTechHalo *= style->DRCScaleFactorD; + DRCTechHalo /= style->DRCScaleFactorN; + /* Set maximum halo */ style->DRCTechHalo = DRCTechHalo;