From 960be0e9b01b6dd83fb370103806ecfc730bf9ce Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Wed, 18 Nov 2020 22:31:19 -0500 Subject: [PATCH] Rewrote the hierarchical check routine so that it does not report disagreements between parent and child cells on GDS generation for templayers, as these layers are not output; any resulting differences showing up eventually on an output layer will be reported. --- VERSION | 2 +- cif/CIFhier.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/VERSION b/VERSION index 2fc65132..0fe10d04 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.84 +8.3.85 diff --git a/cif/CIFhier.c b/cif/CIFhier.c index 4759862c..28dbd72e 100644 --- a/cif/CIFhier.c +++ b/cif/CIFhier.c @@ -421,6 +421,44 @@ cifHierCheckFunc(tile, plane) return 0; } +/* + * ---------------------------------------------------------------------------- + * + * cifHierTempCheckFunc -- + * + * This function is like cifHierCheckFunc() (see above), but is used + * for "templayers", where any parent/child disagreement should be + * considered a non-issue as far as output is concerned. Only the + * actual mask layer will report any problems. + * + * Results: + * Always returns 0 to keep the search alive. + * + * Side effects: + * Error messages may be output. + * + * ---------------------------------------------------------------------------- + */ + +int +cifHierTempCheckFunc(tile, plane) + Tile *tile; /* Tile containing CIF. */ + Plane *plane; /* Plane to check against and modify. */ +{ + Rect area; + + TiToRect(tile, &area); + + if (IsSplit(tile)) + DBNMPaintPlane(plane, TiGetTypeExact(tile), &area, CIFEraseTable, + (PaintUndoInfo *) NULL); + else + DBPaintPlane(plane, &area, CIFEraseTable, (PaintUndoInfo *) NULL); + + CIFTileOps++; + return 0; +} + /* * ---------------------------------------------------------------------------- * @@ -490,9 +528,14 @@ cifCheckAndErase(style) { CIFErrorLayer = i; if (CIFComponentPlanes[i] == NULL) continue; - (void) DBSrPaintArea((Tile *) NULL, CIFComponentPlanes[i], - &TiPlaneRect, &CIFSolidBits, cifHierCheckFunc, - (ClientData) CIFTotalPlanes[i]); + if (CIFCurStyle->cs_layers[i]->cl_flags & CIF_TEMP) + (void) DBSrPaintArea((Tile *) NULL, CIFComponentPlanes[i], + &TiPlaneRect, &CIFSolidBits, cifHierTempCheckFunc, + (ClientData) CIFTotalPlanes[i]); + else + (void) DBSrPaintArea((Tile *) NULL, CIFComponentPlanes[i], + &TiPlaneRect, &CIFSolidBits, cifHierCheckFunc, + (ClientData) CIFTotalPlanes[i]); } }