Merge branch 'master' into magic-8.2
This commit is contained in:
commit
c668b3dd03
1
Makefile
1
Makefile
|
|
@ -58,6 +58,7 @@ libs:
|
|||
(cd $$dir && ${MAKE} lib); done
|
||||
|
||||
depend: database/database.h
|
||||
@echo --- making dependencies
|
||||
${RM} */Depend
|
||||
for dir in ${MODULES} ${UNUSED_MODULES} ${PROGRAMS}; do \
|
||||
(cd $$dir && ${MAKE} depend); done
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ calmaSetPosition(sname)
|
|||
return originalPos;
|
||||
}
|
||||
|
||||
calmaReadError("Cell \"%s\" is used but not defined in this file.\n", sname);
|
||||
CalmaReadError("Cell \"%s\" is used but not defined in this file.\n", sname);
|
||||
|
||||
return originalPos;
|
||||
}
|
||||
|
|
@ -318,23 +318,23 @@ calmaParseStructure(filename)
|
|||
|
||||
if (!CalmaPostOrder)
|
||||
{
|
||||
calmaReadError("Cell \"%s\" was already defined in this file.\n",
|
||||
CalmaReadError("Cell \"%s\" was already defined in this file.\n",
|
||||
strname);
|
||||
calmaReadError("Ignoring duplicate definition\n");
|
||||
CalmaReadError("Ignoring duplicate definition\n");
|
||||
}
|
||||
calmaNextCell();
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
calmaReadError("Cell \"%s\" was already defined in this file.\n",
|
||||
CalmaReadError("Cell \"%s\" was already defined in this file.\n",
|
||||
strname);
|
||||
for (suffix = 1; HashGetValue(he) != NULL; suffix++)
|
||||
{
|
||||
(void) sprintf(newname, "%s_%d", strname, suffix);
|
||||
he = HashFind(&calmaDefInitHash, newname);
|
||||
}
|
||||
calmaReadError("Giving this cell a new name: %s\n", newname);
|
||||
CalmaReadError("Giving this cell a new name: %s\n", newname);
|
||||
strncpy(strname, newname, CALMANAMELENGTH*2);
|
||||
}
|
||||
}
|
||||
|
|
@ -437,7 +437,7 @@ calmaParseStructure(filename)
|
|||
* the appropriate cell of the database.
|
||||
*/
|
||||
|
||||
CIFPaintCurrent();
|
||||
CIFPaintCurrent(FILE_CALMA);
|
||||
}
|
||||
|
||||
DBAdjustLabelsNew(cifReadCellDef, &TiPlaneRect,
|
||||
|
|
@ -508,7 +508,7 @@ calmaParseElement(filename, pnsrefs, pnpaths)
|
|||
READRH(nbytes, rtype);
|
||||
if (nbytes < 0)
|
||||
{
|
||||
calmaReadError("Unexpected EOF.\n");
|
||||
CalmaReadError("Unexpected EOF.\n");
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
|
|
@ -536,7 +536,7 @@ calmaParseElement(filename, pnsrefs, pnpaths)
|
|||
calmaElementText();
|
||||
break;
|
||||
case CALMA_NODE:
|
||||
calmaReadError("NODE elements not supported: skipping.\n");
|
||||
CalmaReadError("NODE elements not supported: skipping.\n");
|
||||
calmaSkipSet(node);
|
||||
break;
|
||||
default:
|
||||
|
|
@ -664,10 +664,10 @@ calmaElementSref(filename)
|
|||
|
||||
if (DBIsAncestor(def, cifReadCellDef))
|
||||
{
|
||||
calmaReadError("Cell %s is an ancestor of %s",
|
||||
CalmaReadError("Cell %s is an ancestor of %s",
|
||||
def->cd_name, cifReadCellDef->cd_name);
|
||||
calmaReadError(" and can't be used as a subcell.\n");
|
||||
calmaReadError("(Use skipped)\n");
|
||||
CalmaReadError(" and can't be used as a subcell.\n");
|
||||
CalmaReadError("(Use skipped)\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -722,12 +722,12 @@ calmaElementSref(filename)
|
|||
nref = nbytes / 8;
|
||||
if (nref > 3)
|
||||
{
|
||||
calmaReadError("Too many points (%d) in SREF/AREF\n", nref);
|
||||
CalmaReadError("Too many points (%d) in SREF/AREF\n", nref);
|
||||
nref = 3;
|
||||
}
|
||||
else if (nref < 1)
|
||||
{
|
||||
calmaReadError("Missing reference points in SREF/AREF (using 0,0)\n");
|
||||
CalmaReadError("Missing reference points in SREF/AREF (using 0,0)\n");
|
||||
refarray[0].p_x = refarray[0].p_y = 0;
|
||||
refarray[1].p_x = refarray[1].p_y = 0;
|
||||
refarray[2].p_x = refarray[2].p_y = 0;
|
||||
|
|
@ -856,8 +856,8 @@ calmaElementSref(filename)
|
|||
if (p.p_x % cols)
|
||||
{
|
||||
n = (p.p_x + (cols+1)/2) / cols;
|
||||
calmaReadError("# cols doesn't divide displacement ref pt\n");
|
||||
calmaReadError(" %d / %d -> %d\n", p.p_x, cols, n);
|
||||
CalmaReadError("# cols doesn't divide displacement ref pt\n");
|
||||
CalmaReadError(" %d / %d -> %d\n", p.p_x, cols, n);
|
||||
xsep = n;
|
||||
}
|
||||
else xsep = p.p_x / cols;
|
||||
|
|
@ -868,8 +868,8 @@ calmaElementSref(filename)
|
|||
if (p.p_y % rows)
|
||||
{
|
||||
n = (p.p_y + (rows+1)/2) / rows;
|
||||
calmaReadError("# rows doesn't divide displacement ref pt\n");
|
||||
calmaReadError(" %d / %d -> %d\n", p.p_y, rows, n);
|
||||
CalmaReadError("# rows doesn't divide displacement ref pt\n");
|
||||
CalmaReadError(" %d / %d -> %d\n", p.p_y, rows, n);
|
||||
ysep = n;
|
||||
}
|
||||
ysep = p.p_y / rows;
|
||||
|
|
|
|||
|
|
@ -110,8 +110,8 @@ calmaReadTransform(ptrans, name)
|
|||
|
||||
if (dmag != (double)((int)(dmag + 0.5)))
|
||||
{
|
||||
calmaReadError("Non-integer magnification (%g) in transform\n", dmag);
|
||||
calmaReadError("Rounding to %d.\n", (int)(dmag + 0.5));
|
||||
CalmaReadError("Non-integer magnification (%g) in transform\n", dmag);
|
||||
CalmaReadError("Rounding to %d.\n", (int)(dmag + 0.5));
|
||||
}
|
||||
GeoScaleTrans(ptrans, (int)(dmag + 0.5), &t);
|
||||
*ptrans = t;
|
||||
|
|
@ -144,13 +144,13 @@ calmaReadTransform(ptrans, name)
|
|||
case 0: case 90: case 180: case 270:
|
||||
break;
|
||||
default:
|
||||
calmaReadError("Non-Manhattan angle (%d) in transform\n", angle);
|
||||
CalmaReadError("Non-Manhattan angle (%d) in transform\n", angle);
|
||||
if (angle < 45) angle = 0;
|
||||
else if (angle < 135) angle = 90;
|
||||
else if (angle < 225) angle = 180;
|
||||
else if (angle < 315) angle = 270;
|
||||
else angle = 0;
|
||||
calmaReadError(" Rounding to %d degrees.\n", angle);
|
||||
CalmaReadError(" Rounding to %d degrees.\n", angle);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -223,7 +223,7 @@ calmaReadI2Record(type, pvalue)
|
|||
return (TRUE);
|
||||
|
||||
eof:
|
||||
calmaReadError("Unexpected EOF.\n");
|
||||
CalmaReadError("Unexpected EOF.\n");
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
|
|
@ -268,7 +268,7 @@ calmaReadI4Record(type, pvalue)
|
|||
return (TRUE);
|
||||
|
||||
eof:
|
||||
calmaReadError("Unexpected EOF.\n");
|
||||
CalmaReadError("Unexpected EOF.\n");
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
|
|
@ -317,7 +317,7 @@ calmaReadStringRecord(type, str)
|
|||
return (TRUE);
|
||||
|
||||
eof:
|
||||
calmaReadError("Unexpected EOF.\n");
|
||||
CalmaReadError("Unexpected EOF.\n");
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
|
|
@ -478,7 +478,7 @@ calmaSkipExact(type)
|
|||
return (TRUE);
|
||||
|
||||
eof:
|
||||
calmaReadError("Unexpected EOF.\n");
|
||||
CalmaReadError("Unexpected EOF.\n");
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ calmaReadPoint(p, iscale)
|
|||
rescale = calmaReadScale2 / FindGCF(calmaReadScale2, abs(p->p_x));
|
||||
if ((calmaReadScale1 * rescale) > CIFRescaleLimit)
|
||||
{
|
||||
calmaReadError("Warning: calma units at max scale; value rounded\n");
|
||||
CalmaReadError("Warning: calma units at max scale; value rounded\n");
|
||||
if (p->p_x < 0)
|
||||
p->p_x -= ((calmaReadScale2 - 1) >> 1);
|
||||
else
|
||||
|
|
@ -165,7 +165,7 @@ calmaReadPoint(p, iscale)
|
|||
rescale = calmaReadScale2 / FindGCF(calmaReadScale2, abs(p->p_y));
|
||||
if ((calmaReadScale1 * rescale) > CIFRescaleLimit)
|
||||
{
|
||||
calmaReadError("Warning: calma units at max scale; value rounded\n");
|
||||
CalmaReadError("Warning: calma units at max scale; value rounded\n");
|
||||
if (p->p_y < 0)
|
||||
p->p_y -= ((calmaReadScale2 - 1) >> 1);
|
||||
else
|
||||
|
|
@ -216,7 +216,7 @@ calmaElementBoundary()
|
|||
if (!calmaReadI2Record(CALMA_LAYER, &layer)
|
||||
|| !calmaReadI2Record(CALMA_DATATYPE, &dt))
|
||||
{
|
||||
calmaReadError("Missing layer or datatype in boundary/box.\n");
|
||||
CalmaReadError("Missing layer or datatype in boundary/box.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -234,7 +234,7 @@ calmaElementBoundary()
|
|||
if (!calmaReadPath(&pathheadp, (plane == NULL) ? 0 : 1))
|
||||
{
|
||||
if (plane != NULL)
|
||||
calmaReadError("Error while reading path for boundary/box; ignored.\n");
|
||||
CalmaReadError("Error while reading path for boundary/box; ignored.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -329,7 +329,7 @@ calmaElementBoundary()
|
|||
|
||||
if (cifCurReadPlanes == cifEditCellPlanes)
|
||||
{
|
||||
CIFPaintCurrent();
|
||||
CIFPaintCurrent(FILE_CALMA);
|
||||
DBReComputeBbox(cifReadCellDef);
|
||||
DRCCheckThis(cifReadCellDef, TT_CHECKPAINT, &cifReadCellDef->cd_bbox);
|
||||
DBWAreaChanged(cifReadCellDef, &cifReadCellDef->cd_bbox,
|
||||
|
|
@ -383,7 +383,7 @@ calmaElementBox()
|
|||
if (!calmaReadI2Record(CALMA_LAYER, &layer)
|
||||
|| !calmaReadI2Record(CALMA_BOXTYPE, &dt))
|
||||
{
|
||||
calmaReadError("Missing layer or datatype in boundary/box.\n");
|
||||
CalmaReadError("Missing layer or datatype in boundary/box.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -407,7 +407,7 @@ calmaElementBox()
|
|||
READRH(nbytes, rtype);
|
||||
if (nbytes < 0)
|
||||
{
|
||||
calmaReadError("EOF when reading box.\n");
|
||||
CalmaReadError("EOF when reading box.\n");
|
||||
return;
|
||||
}
|
||||
if (rtype != CALMA_XY)
|
||||
|
|
@ -420,7 +420,7 @@ calmaElementBox()
|
|||
npoints = (nbytes - CALMAHEADERLENGTH) / 8;
|
||||
if (npoints != 5)
|
||||
{
|
||||
calmaReadError("Box doesn't have 5 points.\n");
|
||||
CalmaReadError("Box doesn't have 5 points.\n");
|
||||
(void) calmaSkipBytes(nbytes - CALMAHEADERLENGTH);
|
||||
return;
|
||||
}
|
||||
|
|
@ -491,7 +491,7 @@ calmaElementPath()
|
|||
if (pathtype != CALMAPATH_SQUAREFLUSH && pathtype != CALMAPATH_SQUAREPLUS &&
|
||||
pathtype != CALMAPATH_CUSTOM)
|
||||
{
|
||||
calmaReadError("Warning: pathtype %d unsupported (ignored).\n", pathtype);
|
||||
CalmaReadError("Warning: pathtype %d unsupported (ignored).\n", pathtype);
|
||||
pathtype = CALMAPATH_SQUAREFLUSH;
|
||||
}
|
||||
|
||||
|
|
@ -505,13 +505,13 @@ calmaElementPath()
|
|||
{
|
||||
if (!calmaReadI4Record(CALMA_WIDTH, &width))
|
||||
{
|
||||
calmaReadError("Error in reading WIDTH in calmaElementPath()\n") ;
|
||||
CalmaReadError("Error in reading WIDTH in calmaElementPath()\n") ;
|
||||
return;
|
||||
}
|
||||
}
|
||||
width *= calmaReadScale1;
|
||||
if (width % calmaReadScale2 != 0)
|
||||
calmaReadError("Wire width snapped to nearest integer boundary.\n");
|
||||
CalmaReadError("Wire width snapped to nearest integer boundary.\n");
|
||||
|
||||
width /= calmaReadScale2;
|
||||
|
||||
|
|
@ -528,12 +528,12 @@ calmaElementPath()
|
|||
if (nbytes > 0 && rtype == CALMA_BGNEXTN)
|
||||
{
|
||||
if (!calmaReadI4Record(CALMA_BGNEXTN, &extend1))
|
||||
calmaReadError("Error in reading BGNEXTN in path (ignored)\n") ;
|
||||
CalmaReadError("Error in reading BGNEXTN in path (ignored)\n") ;
|
||||
else
|
||||
{
|
||||
extend1 *= calmaReadScale1;
|
||||
if (extend1 % calmaReadScale2 != 0)
|
||||
calmaReadError("Wire extension snapped to nearest integer boundary.\n");
|
||||
CalmaReadError("Wire extension snapped to nearest integer boundary.\n");
|
||||
extend1 *= 2;
|
||||
extend1 /= calmaReadScale2;
|
||||
}
|
||||
|
|
@ -543,12 +543,12 @@ calmaElementPath()
|
|||
if (nbytes > 0 && rtype == CALMA_ENDEXTN)
|
||||
{
|
||||
if (!calmaReadI4Record(CALMA_ENDEXTN, &extend2))
|
||||
calmaReadError("Error in reading ENDEXTN in path (ignored)\n") ;
|
||||
CalmaReadError("Error in reading ENDEXTN in path (ignored)\n") ;
|
||||
else
|
||||
{
|
||||
extend2 *= calmaReadScale1;
|
||||
if (extend2 % calmaReadScale2 != 0)
|
||||
calmaReadError("Wire extension snapped to nearest integer boundary.\n");
|
||||
CalmaReadError("Wire extension snapped to nearest integer boundary.\n");
|
||||
extend2 *= 2;
|
||||
extend2 /= calmaReadScale2;
|
||||
}
|
||||
|
|
@ -558,7 +558,7 @@ calmaElementPath()
|
|||
savescale = calmaReadScale1;
|
||||
if (!calmaReadPath(&pathheadp, 2))
|
||||
{
|
||||
calmaReadError("Improper path; ignored.\n");
|
||||
CalmaReadError("Improper path; ignored.\n");
|
||||
return;
|
||||
}
|
||||
if (savescale != calmaReadScale1)
|
||||
|
|
@ -656,7 +656,7 @@ calmaElementPath()
|
|||
|
||||
if (cifCurReadPlanes == cifEditCellPlanes)
|
||||
{
|
||||
CIFPaintCurrent();
|
||||
CIFPaintCurrent(FILE_CALMA);
|
||||
DBReComputeBbox(cifReadCellDef);
|
||||
DRCCheckThis(cifReadCellDef, TT_CHECKPAINT, &cifReadCellDef->cd_bbox);
|
||||
DBWAreaChanged(cifReadCellDef, &cifReadCellDef->cd_bbox,
|
||||
|
|
@ -781,12 +781,12 @@ calmaElementText()
|
|||
/* Use WIDTH value to set the font size */
|
||||
if (!calmaReadI4Record(CALMA_WIDTH, &width))
|
||||
{
|
||||
calmaReadError("Error in reading WIDTH in calmaElementText()\n") ;
|
||||
CalmaReadError("Error in reading WIDTH in calmaElementText()\n") ;
|
||||
return;
|
||||
}
|
||||
width *= calmaReadScale1;
|
||||
if (width % calmaReadScale2 != 0)
|
||||
calmaReadError("Text width snapped to nearest integer boundary.\n");
|
||||
CalmaReadError("Text width snapped to nearest integer boundary.\n");
|
||||
|
||||
width /= calmaReadScale2;
|
||||
|
||||
|
|
@ -840,7 +840,7 @@ calmaElementText()
|
|||
nbytes -= CALMAHEADERLENGTH;
|
||||
if (nbytes < 8)
|
||||
{
|
||||
calmaReadError("Not enough bytes in point record.\n");
|
||||
CalmaReadError("Not enough bytes in point record.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -890,15 +890,15 @@ calmaElementText()
|
|||
}
|
||||
}
|
||||
if (changed) {
|
||||
calmaReadError("Warning: improper characters fixed in label '%s'\n",
|
||||
CalmaReadError("Warning: improper characters fixed in label '%s'\n",
|
||||
savstring);
|
||||
if (!algmsg) {
|
||||
algmsg = TRUE;
|
||||
calmaReadError(" (algorithm used: trailing <CR> dropped, "
|
||||
CalmaReadError(" (algorithm used: trailing <CR> dropped, "
|
||||
"<CR> and ' ' changed to '_', \n"
|
||||
" other non-printables changed to '?')\n");
|
||||
}
|
||||
calmaReadError(" modified label is '%s'\n", textbody);
|
||||
CalmaReadError(" modified label is '%s'\n", textbody);
|
||||
freeMagic(savstring);
|
||||
}
|
||||
}
|
||||
|
|
@ -908,7 +908,7 @@ calmaElementText()
|
|||
/* Place the label */
|
||||
if (strlen(textbody) == 0)
|
||||
{
|
||||
calmaReadError("Warning: Ignoring empty string label at (%d, %d)\n",
|
||||
CalmaReadError("Warning: Ignoring empty string label at (%d, %d)\n",
|
||||
r.r_ll.p_x * cifCurReadStyle->crs_scaleFactor,
|
||||
r.r_ll.p_y * cifCurReadStyle->crs_scaleFactor);
|
||||
}
|
||||
|
|
@ -920,7 +920,7 @@ calmaElementText()
|
|||
}
|
||||
else if (type < 0)
|
||||
{
|
||||
calmaReadError("Warning: label \"%s\" at (%d, %d) is on unhandled"
|
||||
CalmaReadError("Warning: label \"%s\" at (%d, %d) is on unhandled"
|
||||
" layer:purpose pair %d:%d and will be discarded.\n", textbody,
|
||||
r.r_ll.p_x * cifCurReadStyle->crs_scaleFactor,
|
||||
r.r_ll.p_y * cifCurReadStyle->crs_scaleFactor, layer, textt);
|
||||
|
|
@ -1036,7 +1036,7 @@ calmaReadPath(pathheadpp, iscale)
|
|||
READRH(nbytes, rtype);
|
||||
if (nbytes < 0)
|
||||
{
|
||||
calmaReadError("EOF when reading path.\n");
|
||||
CalmaReadError("EOF when reading path.\n");
|
||||
return (FALSE);
|
||||
}
|
||||
if (rtype != CALMA_XY)
|
||||
|
|
@ -1063,7 +1063,7 @@ calmaReadPath(pathheadpp, iscale)
|
|||
}
|
||||
}
|
||||
if (ABS(path.cifp_x) > 0x0fffffff || ABS(path.cifp_y) > 0x0fffffff) {
|
||||
calmaReadError("Warning: Very large point in path: (%d, %d)\n",
|
||||
CalmaReadError("Warning: Very large point in path: (%d, %d)\n",
|
||||
path.cifp_x, path.cifp_y);
|
||||
}
|
||||
if (feof(calmaInputFile))
|
||||
|
|
@ -1141,6 +1141,6 @@ calmaLayerError(mesg, layer, dt)
|
|||
if (HashGetValue(he) == NULL)
|
||||
{
|
||||
HashSetValue(he, (ClientData) 1);
|
||||
calmaReadError("%s, layer=%d type=%d\n", mesg, layer, dt);
|
||||
CalmaReadError("%s, layer=%d type=%d\n", mesg, layer, dt);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -232,7 +232,7 @@ done:
|
|||
freeMagic(libname);
|
||||
}
|
||||
|
||||
CIFReadCellCleanup(1);
|
||||
CIFReadCellCleanup(FILE_CALMA);
|
||||
HashKill(&calmaDefInitHash);
|
||||
UndoEnable();
|
||||
|
||||
|
|
@ -330,7 +330,7 @@ calmaParseUnits()
|
|||
/*
|
||||
* ----------------------------------------------------------------------------
|
||||
*
|
||||
* calmaReadError --
|
||||
* CalmaReadError --
|
||||
*
|
||||
* This procedure is called to print out error messages during
|
||||
* Calma file reading.
|
||||
|
|
@ -349,7 +349,7 @@ calmaParseUnits()
|
|||
|
||||
void
|
||||
/*VARARGS1*/
|
||||
calmaReadError(format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
|
||||
CalmaReadError(format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
|
||||
char *format;
|
||||
char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10;
|
||||
{
|
||||
|
|
@ -408,7 +408,7 @@ calmaUnexpected(wanted, got)
|
|||
int wanted; /* Type of record we wanted */
|
||||
int got; /* Type of record we got */
|
||||
{
|
||||
calmaReadError("Unexpected record type in input: \n");
|
||||
CalmaReadError("Unexpected record type in input: \n");
|
||||
|
||||
if (CIFWarningLevel == CIF_WARN_NONE) return;
|
||||
if (calmaTotalErrors < 100 || (CIFWarningLevel != CIF_WARN_LIMIT))
|
||||
|
|
|
|||
|
|
@ -42,5 +42,6 @@ extern bool CalmaWrite();
|
|||
extern void CalmaReadFile();
|
||||
extern void CalmaTechInit();
|
||||
extern bool CalmaGenerateArray();
|
||||
extern void CalmaReadError();
|
||||
|
||||
#endif /* _CALMA_H */
|
||||
|
|
|
|||
|
|
@ -557,7 +557,8 @@ cifCopyPaintFunc(tile, cifCopyRec)
|
|||
*/
|
||||
|
||||
int
|
||||
CIFPaintCurrent()
|
||||
CIFPaintCurrent(filetype)
|
||||
bool filetype;
|
||||
{
|
||||
extern int cifMakeBoundaryFunc(); /* Forward declaration. */
|
||||
extern int cifPaintCurrentFunc(); /* Forward declaration. */
|
||||
|
|
@ -658,7 +659,7 @@ CIFPaintCurrent()
|
|||
&DBAllButSpaceBits, cifCheckPaintFunc,
|
||||
(ClientData)NULL) == 1))
|
||||
DBSrPaintArea((Tile *) NULL, plane, &TiPlaneRect,
|
||||
&CIFSolidBits, cifMakeBoundaryFunc, (ClientData)NULL);
|
||||
&CIFSolidBits, cifMakeBoundaryFunc, (ClientData)filetype);
|
||||
}
|
||||
|
||||
/* Swap planes */
|
||||
|
|
@ -692,7 +693,7 @@ CIFPaintCurrent()
|
|||
int
|
||||
cifMakeBoundaryFunc(tile, clientdata)
|
||||
Tile *tile; /* Tile of CIF information. */
|
||||
ClientData clientdata; /* Not used */
|
||||
ClientData clientdata; /* Pass the file type (CIF or CALMA) */
|
||||
{
|
||||
/* It is assumed that there is one rectangle for the boundary. */
|
||||
/* If there are multiple rectangles defined with the boundary */
|
||||
|
|
@ -701,6 +702,7 @@ cifMakeBoundaryFunc(tile, clientdata)
|
|||
Rect area;
|
||||
char propertyvalue[128], *storedvalue;
|
||||
int savescale;
|
||||
bool filetype = (bool)clientdata;
|
||||
|
||||
TiToRect(tile, &area);
|
||||
area.r_xtop = CIFScaleCoord(area.r_xtop, COORD_EXACT);
|
||||
|
|
@ -727,8 +729,35 @@ cifMakeBoundaryFunc(tile, clientdata)
|
|||
}
|
||||
|
||||
if (cifReadCellDef->cd_flags & CDFIXEDBBOX)
|
||||
CIFReadError("Warning: Cell %s boundary was redefined.\n",
|
||||
cifReadCellDef->cd_name);
|
||||
{
|
||||
char *propvalue;
|
||||
bool found;
|
||||
|
||||
/* Only flag a warning if the redefined boundary was */
|
||||
/* different from the original. */
|
||||
|
||||
propvalue = (char *)DBPropGet(cifReadCellDef, "FIXED_BBOX", &found);
|
||||
if (found)
|
||||
{
|
||||
Rect bbox;
|
||||
if (sscanf(propvalue, "%d %d %d %d", &bbox.r_xbot, &bbox.r_ybot,
|
||||
&bbox.r_xtop, &bbox.r_ytop) == 4)
|
||||
{
|
||||
if ((bbox.r_xbot != area.r_xbot) ||
|
||||
(bbox.r_ybot != area.r_ybot) ||
|
||||
(bbox.r_xtop != area.r_xtop) ||
|
||||
(bbox.r_ytop != area.r_ytop))
|
||||
{
|
||||
if (filetype == FILE_CIF)
|
||||
CIFReadError("Warning: Cell %s boundary was redefined.\n",
|
||||
cifReadCellDef->cd_name);
|
||||
else
|
||||
CalmaError("Warning: Cell %s boundary was redefined.\n",
|
||||
cifReadCellDef->cd_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(propertyvalue, "%d %d %d %d",
|
||||
area.r_xbot, area.r_ybot, area.r_xtop, area.r_ytop);
|
||||
|
|
@ -841,7 +870,7 @@ CIFParseFinish()
|
|||
* layer info.
|
||||
*/
|
||||
|
||||
CIFPaintCurrent();
|
||||
CIFPaintCurrent(FILE_CIF);
|
||||
|
||||
DBAdjustLabels(cifReadCellDef, &TiPlaneRect);
|
||||
DBReComputeBbox(cifReadCellDef);
|
||||
|
|
@ -1389,8 +1418,8 @@ CIFParseUser()
|
|||
*/
|
||||
|
||||
void
|
||||
CIFReadCellCleanup(type)
|
||||
int type; // 0 = CIF, 1 = GDS, because routine is used by both
|
||||
CIFReadCellCleanup(filetype)
|
||||
bool filetype;
|
||||
{
|
||||
HashEntry *h;
|
||||
HashSearch hs;
|
||||
|
|
@ -1400,10 +1429,10 @@ CIFReadCellCleanup(type)
|
|||
|
||||
if (cifSubcellBeingRead)
|
||||
{
|
||||
if (type == 0)
|
||||
if (filetype == FILE_CIF)
|
||||
CIFReadError("CIF ended partway through a symbol definition.\n");
|
||||
else
|
||||
calmaReadError("GDS ended partway through a symbol definition.\n");
|
||||
CalmaReadError("GDS ended partway through a symbol definition.\n");
|
||||
(void) CIFParseFinish();
|
||||
}
|
||||
|
||||
|
|
@ -1416,24 +1445,24 @@ CIFReadCellCleanup(type)
|
|||
def = (CellDef *) HashGetValue(h);
|
||||
if (def == NULL)
|
||||
{
|
||||
if (type == 0)
|
||||
if (filetype == FILE_CIF)
|
||||
CIFReadError("cell table has NULL entry (Magic error).\n");
|
||||
else
|
||||
calmaReadError("cell table has NULL entry (Magic error).\n");
|
||||
CalmaReadError("cell table has NULL entry (Magic error).\n");
|
||||
continue;
|
||||
}
|
||||
flags = def->cd_flags;
|
||||
if (!(flags & CDAVAILABLE))
|
||||
{
|
||||
if (type == 0)
|
||||
if (filetype == FILE_CIF)
|
||||
CIFReadError("cell %s was used but not defined.\n", def->cd_name);
|
||||
else
|
||||
calmaReadError("cell %s was used but not defined.\n", def->cd_name);
|
||||
CalmaReadError("cell %s was used but not defined.\n", def->cd_name);
|
||||
}
|
||||
def->cd_flags &= ~CDPROCESSEDGDS;
|
||||
|
||||
if ((type == 0 && CIFNoDRCCheck == FALSE) ||
|
||||
(type == 1 && CalmaNoDRCCheck == FALSE))
|
||||
if ((filetype == FILE_CIF && CIFNoDRCCheck == FALSE) ||
|
||||
(filetype == 1 && CalmaNoDRCCheck == FALSE))
|
||||
DRCCheckThis(def, TT_CHECKPAINT, &def->cd_bbox);
|
||||
DBWAreaChanged(def, &def->cd_bbox, DBW_ALLWINDOWS, &DBAllButSpaceBits);
|
||||
DBCellSetModified(def, TRUE);
|
||||
|
|
@ -1441,7 +1470,7 @@ CIFReadCellCleanup(type)
|
|||
|
||||
/* Do geometrical processing on the top-level cell. */
|
||||
|
||||
CIFPaintCurrent();
|
||||
CIFPaintCurrent(FILE_CIF);
|
||||
DBAdjustLabels(EditCellUse->cu_def, &TiPlaneRect);
|
||||
DBReComputeBbox(EditCellUse->cu_def);
|
||||
DBWAreaChanged(EditCellUse->cu_def, &EditCellUse->cu_def->cd_bbox,
|
||||
|
|
@ -1485,7 +1514,7 @@ CIFReadCellCleanup(type)
|
|||
if (!(def->cd_flags & CDFLATTENED))
|
||||
CIFReadError("%s read error: Unresolved geometry in cell"
|
||||
" %s maps to no magic layers\n",
|
||||
(type == 0) ? "CIF" : "GDS", def->cd_name);
|
||||
(filetype == FILE_CIF) ? "CIF" : "GDS", def->cd_name);
|
||||
|
||||
#if 0
|
||||
/* Remove the cell if it has no parents, no children, and no geometry */
|
||||
|
|
@ -1498,11 +1527,11 @@ CIFReadCellCleanup(type)
|
|||
if (DBCellDeleteDef(def) == FALSE)
|
||||
{
|
||||
CIFReadError("%s read error: Unable to delete cell %s\n",
|
||||
(type == 0) ? "CIF" : "GDS", savename);
|
||||
(filetype == FILE_CIF) ? "CIF" : "GDS", savename);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (type == 0)
|
||||
if (filetype == FILE_CIF)
|
||||
TxPrintf("CIF read: Removed flattened cell %s\n", savename);
|
||||
else
|
||||
TxPrintf("GDS read: Removed flattened cell %s\n", savename);
|
||||
|
|
|
|||
|
|
@ -1660,6 +1660,6 @@ CIFReadFile(file)
|
|||
CIFReadError("no \"End\" statement.\n");
|
||||
|
||||
done:
|
||||
CIFReadCellCleanup(0);
|
||||
CIFReadCellCleanup(FILE_CIF);
|
||||
UndoEnable();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,10 @@
|
|||
* depends on the size of the layout.
|
||||
*/
|
||||
|
||||
/* Passed to CIFPaintCurrent() for print statement formatting */
|
||||
#define FILE_CIF 0
|
||||
#define FILE_CALMA 1
|
||||
|
||||
/* Exported global variables (commands/CmdCD.c) */
|
||||
|
||||
extern int CIFWarningLevel;
|
||||
|
|
|
|||
|
|
@ -3802,7 +3802,7 @@ cmdDumpParseArgs(cmdName, w, cmd, dummy, scx)
|
|||
char *propvalue;
|
||||
bool found;
|
||||
|
||||
propvalue = DBPropGet(def, "FIXED_BBOX", &found);
|
||||
propvalue = (char *)DBPropGet(def, "FIXED_BBOX", &found);
|
||||
if (found)
|
||||
{
|
||||
if (sscanf(propvalue, "%d %d %d %d", &bbox.r_xbot, &bbox.r_ybot,
|
||||
|
|
|
|||
|
|
@ -2448,7 +2448,7 @@ LefRead(inName, importForeign)
|
|||
|
||||
case LEF_SECTION_NONDEFAULTRULE:
|
||||
token = LefNextToken(f, TRUE);
|
||||
TxPrintf("LEF file: Defines non-default rule %s (ignored)\n", token);
|
||||
LefError(LEF_INFO, "Defines non-default rule %s (ignored)\n", token);
|
||||
sprintf(tsave, "%.127s", token);
|
||||
LefSkipSection(f, tsave);
|
||||
break;
|
||||
|
|
@ -2457,7 +2457,7 @@ LefRead(inName, importForeign)
|
|||
break;
|
||||
case LEF_SECTION_SITE:
|
||||
token = LefNextToken(f, TRUE);
|
||||
TxPrintf("LEF file: Defines site %s (ignored)\n", token);
|
||||
LefError(LEF_INFO, "Defines site %s (ignored)\n", token);
|
||||
sprintf(tsave, "%.127s", token);
|
||||
LefSkipSection(f, tsave);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in New Issue