Merge branch 'master' into bplane

Conflicts:
	commands/CmdCD.c
	database/DBcellsrch.c
	database/DBconnect.c
	database/DBio.c
	lef/lefRead.c
	select/selDisplay.c

Updated the bplane implementation with all recent updates (merged master).
This commit is contained in:
Tim Edwards 2019-07-24 20:36:55 -04:00
commit 197c3f3448
88 changed files with 2711 additions and 1167 deletions

View File

@ -47,7 +47,7 @@ database/database.h: database/database.h.in
@echo --- making header file database/database.h
${SCRIPTS}/makedbh database/database.h.in database/database.h
modules:
modules: database/database.h depend
@echo --- making modules
for dir in ${MODULES} ${PROGRAMS}; do \
(cd $$dir && ${MAKE} module); done
@ -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

View File

@ -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;
}
@ -288,6 +288,7 @@ calmaParseStructure(filename)
int mfactor;
off_t filepos;
bool was_called;
bool was_initialized;
CellDef *def;
/* Make sure this is a structure; if not, let the caller know we're done */
@ -296,7 +297,8 @@ calmaParseStructure(filename)
return (FALSE);
/* Read the structure name */
if (!calmaSkipExact(CALMA_BGNSTR)) goto syntaxerror;;
was_initialized = FALSE;
if (!calmaSkipExact(CALMA_BGNSTR)) goto syntaxerror;
if (!calmaReadStringRecord(CALMA_STRNAME, &strname)) goto syntaxerror;
TxPrintf("Reading \"%s\".\n", strname);
@ -316,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);
}
}
@ -354,6 +356,7 @@ calmaParseStructure(filename)
/* Initialize the hash table for layer errors */
HashInit(&calmaLayerHash, 32, sizeof (CalmaLayerType) / sizeof (unsigned));
was_initialized = TRUE;
/* Body of structure: a sequence of elements */
osrefs = nsrefs = 0;
@ -434,7 +437,7 @@ calmaParseStructure(filename)
* the appropriate cell of the database.
*/
CIFPaintCurrent();
CIFPaintCurrent(FILE_CALMA);
}
DBAdjustLabelsNew(cifReadCellDef, &TiPlaneRect,
@ -466,7 +469,7 @@ done:
/* Syntax error: skip to CALMA_ENDSTR */
syntaxerror:
HashKill(&calmaLayerHash);
if (was_initialized == TRUE) HashKill(&calmaLayerHash);
return (calmaSkipTo(CALMA_ENDSTR));
}
@ -505,7 +508,7 @@ calmaParseElement(filename, pnsrefs, pnpaths)
READRH(nbytes, rtype);
if (nbytes < 0)
{
calmaReadError("Unexpected EOF.\n");
CalmaReadError("Unexpected EOF.\n");
return (FALSE);
}
@ -533,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:
@ -661,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;
}
@ -719,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;
@ -853,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;
@ -865,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;

View File

@ -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);
}

View File

@ -57,8 +57,6 @@ extern HashTable calmaDefInitHash;
extern void calmaLayerError();
bool calmaReadPath();
typedef enum { LABEL_TYPE_NONE, LABEL_TYPE_TEXT, LABEL_TYPE_PORT } labelType;
/*
* ----------------------------------------------------------------------------
*
@ -145,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
@ -167,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
@ -218,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;
}
@ -236,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;
}
@ -274,7 +272,6 @@ calmaElementBoundary()
}
}
CIFPropRecordPath(cifReadCellDef, pathheadp, FALSE);
rp = CIFPolyToRects(pathheadp, plane, CIFPaintTable, (PaintUndoInfo *)NULL);
CIFFreePath(pathheadp);
@ -300,7 +297,7 @@ calmaElementBoundary()
rpc.r_ytop /= calmaReadScale1;
if ((ciftype >= 0) &&
((cifCurReadStyle->crs_labelSticky[ciftype] != LABEL_TYPE_NONE)))
(cifCurReadStyle->crs_labelSticky[ciftype] != LABEL_TYPE_NONE))
{
Label *lab;
TileType type;
@ -332,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,
@ -386,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;
}
@ -410,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)
@ -423,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;
}
@ -494,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;
}
@ -508,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;
@ -531,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;
}
@ -546,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;
}
@ -561,7 +558,7 @@ calmaElementPath()
savescale = calmaReadScale1;
if (!calmaReadPath(&pathheadp, 2))
{
calmaReadError("Improper path; ignored.\n");
CalmaReadError("Improper path; ignored.\n");
return;
}
if (savescale != calmaReadScale1)
@ -652,14 +649,14 @@ calmaElementPath()
}
}
CIFPropRecordPath(cifReadCellDef, pathheadp, TRUE);
CIFPropRecordPath(cifReadCellDef, pathheadp, TRUE, "path");
CIFPaintWirePath(pathheadp, width,
(pathtype == CALMAPATH_SQUAREFLUSH || pathtype == CALMAPATH_CUSTOM) ?
FALSE : TRUE, plane, CIFPaintTable, (PaintUndoInfo *)NULL);
if (cifCurReadPlanes == cifEditCellPlanes)
{
CIFPaintCurrent();
CIFPaintCurrent(FILE_CALMA);
DBReComputeBbox(cifReadCellDef);
DRCCheckThis(cifReadCellDef, TT_CHECKPAINT, &cifReadCellDef->cd_bbox);
DBWAreaChanged(cifReadCellDef, &cifReadCellDef->cd_bbox,
@ -715,7 +712,7 @@ calmaElementText()
cifnum = CIFCalmaLayerToCifLayer(layer, textt, cifCurReadStyle);
if (cifnum < 0)
{
if(cifCurReadStyle->crs_flags & CRF_IGNORE_UNKNOWNLAYER_LABELS)
if (cifCurReadStyle->crs_flags & CRF_IGNORE_UNKNOWNLAYER_LABELS)
type = -1;
else {
calmaLayerError("Label on unknown layer/datatype", layer, textt);
@ -728,7 +725,7 @@ calmaElementText()
angle = 0;
/* Default size is 1um */
size = (int)((800 * cifCurReadStyle->crs_multiplier)
size = (int)((1000 * cifCurReadStyle->crs_multiplier)
/ cifCurReadStyle->crs_scaleFactor);
/* Default position is bottom-right (but what the spec calls "top-left"!) */
pos = GEO_SOUTHEAST;
@ -775,6 +772,31 @@ calmaElementText()
else if (nbytes > 0 && rtype != CALMA_STRANS)
calmaSkipSet(ignore);
/* NOTE: Record may contain both PRESENTATION and WIDTH */
PEEKRH(nbytes, rtype);
if (nbytes > 0 && rtype == CALMA_WIDTH)
{
int width;
/* Use WIDTH value to set the font size */
if (!calmaReadI4Record(CALMA_WIDTH, &width))
{
CalmaReadError("Error in reading WIDTH in calmaElementText()\n") ;
return;
}
width *= calmaReadScale1;
if (width % calmaReadScale2 != 0)
CalmaReadError("Text width snapped to nearest integer boundary.\n");
width /= calmaReadScale2;
/* Convert to database units, because dimension goes to PutLabel */
/* and is not converted through CIFPaintCurrent(). */
size = CIFScaleCoord(width, COORD_ANY);
}
else if (nbytes > 0 && rtype != CALMA_STRANS)
calmaSkipSet(ignore);
READRH(nbytes, rtype);
if (nbytes > 0 && rtype == CALMA_STRANS)
{
@ -785,9 +807,10 @@ calmaElementText()
if (nbytes > 0 && rtype == CALMA_MAG)
{
calmaReadR8(&dval);
/* Assume that MAG is the label size in microns */
/* "size" is the label size in 8 * (database units) */
size = (int)((dval * 800 * cifCurReadStyle->crs_multiplier)
/* "size" is the label size in 10 * (database units) */
size = (int)((dval * 1000 * cifCurReadStyle->crs_multiplier)
/ cifCurReadStyle->crs_scaleFactor);
}
else
@ -817,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
{
@ -867,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);
}
}
@ -885,13 +908,19 @@ 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);
}
else if (cifCurReadStyle->crs_labelSticky[cifnum] == LABEL_TYPE_CELLID)
{
/* Special handling of label layers marked "cellid" in the techfile. */
/* The actual cellname is the ID string, not the GDS structure name. */
DBCellRenameDef(cifReadCellDef, textbody);
}
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);
@ -1007,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)
@ -1034,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))
@ -1112,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);
}
}

View File

@ -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,29 +349,35 @@ 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;
{
off_t filepos;
calmaTotalErrors++;
if (CIFWarningLevel == CIF_WARN_NONE) return;
if ((calmaTotalErrors < 100) || (CIFWarningLevel != CIF_WARN_LIMIT))
{
filepos = ftello(calmaInputFile);
if (CIFWarningLevel == CIF_WARN_REDIRECT)
{
if (calmaErrorFile != NULL)
{
fprintf(calmaErrorFile, "Error while reading cell \"%s\": ",
fprintf(calmaErrorFile, "Error while reading cell \"%s\" ",
cifReadCellDef->cd_name);
fprintf(calmaErrorFile, "(byte position %"DLONG_PREFIX"ld): ",
(dlong)filepos);
fprintf(calmaErrorFile, format, a1, a2, a3, a4, a5, a6, a7,
a8, a9, a10);
}
}
else
{
TxError("Error while reading cell \"%s\": ", cifReadCellDef->cd_name);
TxError("Error while reading cell \"%s\" ", cifReadCellDef->cd_name);
TxError("(byte position %"DLONG_PREFIX"d): ", (dlong)filepos);
TxError(format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
}
}
@ -402,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))

View File

@ -365,9 +365,8 @@ CalmaWrite(rootDef, f)
*/
bool
calmaDumpStructure(def, cellstart, outf, calmaDefHash, filename)
calmaDumpStructure(def, outf, calmaDefHash, filename)
CellDef *def;
off_t cellstart;
FILE *outf;
HashTable *calmaDefHash;
char *filename;
@ -404,6 +403,8 @@ calmaDumpStructure(def, cellstart, outf, calmaDefHash, filename)
{
/* Structure is defined more than once */
TxError("Structure %s defined redundantly in GDS\n", strname);
/* To be considered: Should the structure be output more than once? */
calmaOutStringRecord(CALMA_STRNAME, newnameptr, outf);
}
else if (!strcmp(strname, def->cd_name))
{
@ -591,10 +592,9 @@ syntaxerror:
*/
void
calmaFullDump(def, fi, cellstart, outf, filename)
calmaFullDump(def, fi, outf, filename)
CellDef *def;
FILE *fi;
off_t cellstart;
FILE *outf;
char *filename;
{
@ -657,7 +657,7 @@ calmaFullDump(def, fi, cellstart, outf, filename)
}
HashSetValue(he, StrDup(NULL, uniqlibname));
while (calmaDumpStructure(def, cellstart, outf, &calmaDefHash, filename))
while (calmaDumpStructure(def, outf, &calmaDefHash, filename))
if (SigInterruptPending)
goto done;
calmaSkipExact(CALMA_ENDLIB);
@ -811,7 +811,7 @@ calmaProcessDef(def, outf)
he = HashLookOnly(&calmaLibHash, retfilename);
if (he == NULL)
calmaFullDump(def, fi, cellstart, outf, retfilename);
calmaFullDump(def, fi, outf, retfilename);
fclose(fi);
def->cd_flags |= CDVENDORGDS;
@ -2755,16 +2755,17 @@ calmaOutStringRecord(type, str, f)
/*
* Make sure length is even.
* Output at most CALMANAMELENGTH characters.
* If the name is longer than CALMANAMELENGTH, then output the
* last CALMANAMELENGTH characters (since cell names are more
* likely to be unique in the last characters than in the first
* characters).
*/
if (len & 01) len++;
if (len > CALMANAMELENGTH)
{
char csav;
TxError("Warning: Cellname %s truncated ", str);
csav = *(str + 32);
*(str + 32) = '\0';
TxError("to %32s (GDS format limit)\n", str);
*(str + 32) = csav;
TxError("to %s (GDS format limit)\n", str + len - CALMANAMELENGTH);
locstr = str + len - CALMANAMELENGTH;
len = CALMANAMELENGTH;
}
calmaOutI2(len+4, f); /* Record length */

View File

@ -1,30 +1,40 @@
CalmaRead.o: CalmaRead.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/utils.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../utils/malloc.h ../utils/tech.h ../cif/cif.h \
../cif/CIFint.h ../cif/CIFread.h ../utils/signals.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../textio/textio.h \
../calma/calmaInt.h ../commands/commands.h ../utils/undo.h
CalmaRdcl.o: CalmaRdcl.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/utils.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../utils/malloc.h ../utils/tech.h ../cif/cif.h \
../cif/CIFint.h ../cif/CIFread.h ../utils/signals.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../textio/textio.h \
../calma/calmaInt.h ../calma/calma.h
CalmaRdio.o: CalmaRdio.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/utils.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../utils/malloc.h ../utils/tech.h ../cif/cif.h \
../cif/CIFint.h ../cif/CIFread.h ../utils/signals.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../textio/textio.h \
../calma/calmaInt.h
CalmaRdpt.o: CalmaRdpt.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/utils.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../utils/malloc.h ../utils/tech.h ../cif/cif.h \
../cif/CIFint.h ../cif/CIFread.h ../utils/signals.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../textio/textio.h \
../calma/calmaInt.h ../calma/calma.h
CalmaWrite.o: CalmaWrite.c ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../tiles/tile.h ../utils/utils.h ../utils/hash.h \
../database/database.h ../database/databaseInt.h ../utils/tech.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/tech.h \
../cif/cif.h ../cif/CIFint.h ../utils/signals.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../textio/textio.h \
../calma/calmaInt.h ../utils/main.h ../utils/stack.h

View File

@ -42,5 +42,6 @@ extern bool CalmaWrite();
extern void CalmaReadFile();
extern void CalmaTechInit();
extern bool CalmaGenerateArray();
extern void CalmaReadError();
#endif /* _CALMA_H */

View File

@ -130,6 +130,9 @@ typedef struct
/* Length of record header */
#define CALMAHEADERLENGTH 4
/* Label types */
typedef enum { LABEL_TYPE_NONE, LABEL_TYPE_TEXT, LABEL_TYPE_PORT, LABEL_TYPE_CELLID } labelType;
/* ------------------------- Input macros ----------------------------- */
/* Globals for Calma reading */

View File

@ -3036,6 +3036,29 @@ CIFGenLayer(op, area, cellDef, temps, clientdata)
}
break;
case CIFOP_BOUNDARY:
cifPlane = curPlane;
/* This function for cifoutput only. cifinput handled separately. */
if (cellDef && (cellDef->cd_flags & CDFIXEDBBOX))
{
char *propvalue;
bool found;
propvalue = (char *)DBPropGet(cellDef, "FIXED_BBOX", &found);
if (!found) break;
if (sscanf(propvalue, "%d %d %d %d", &bbox.r_xbot, &bbox.r_ybot,
&bbox.r_xtop, &bbox.r_ytop) != 4) break;
cifScale = (CIFCurStyle) ? CIFCurStyle->cs_scaleFactor : 1;
bbox.r_xbot *= cifScale;
bbox.r_xtop *= cifScale;
bbox.r_ybot *= cifScale;
bbox.r_ytop *= cifScale;
DBNMPaintPlane(cifPlane, CIF_SOLIDTYPE, &bbox,
CIFPaintTable, (PaintUndoInfo *)NULL);
}
break;
case CIFOP_BBOX:
if (CIFErrorDef == NULL) break;
@ -3149,6 +3172,7 @@ CIFGen(cellDef, area, planes, layers, replace, genAllPlanes, clientdata)
CIFErrorLayer = i;
new[i] = CIFGenLayer(CIFCurStyle->cs_layers[i]->cl_ops,
&expanded, cellDef, new, clientdata);
/* Clean up the non-manhattan geometry in the plane */
if (CIFUnfracture) DBMergeNMTiles(new[i], &expanded,
(PaintUndoInfo *)NULL);

View File

@ -121,6 +121,8 @@ typedef struct cifop
* the cell bounding box. This involves no magic type
* layers but may itself be acted upon with grow/shrink
* rules.
* CIFOP_BOUNDARY - Added 6/5/19---map the FIXED_BBOX property bounding
* box coordinates into CIF layer geometry.
* CIFOP_NET - Added 11/3/08---pull an entire electrical net into
* the CIF layer, selectively picking layers.
* CIFOP_MAXRECT - Reduce all areas to the largest internal fitting
@ -144,9 +146,10 @@ typedef struct cifop
#define CIFOP_ANDNOT 12
#define CIFOP_SQUARES_G 13
#define CIFOP_BBOX 14
#define CIFOP_NET 15
#define CIFOP_MAXRECT 16
#define CIFOP_COPYUP 17
#define CIFOP_BOUNDARY 15
#define CIFOP_NET 16
#define CIFOP_MAXRECT 17
#define CIFOP_COPYUP 18
/* Added by Tim 10/21/2004 */
/* The following structure is used to pass information on how to draw

View File

@ -557,15 +557,18 @@ cifCopyPaintFunc(tile, cifCopyRec)
*/
int
CIFPaintCurrent()
CIFPaintCurrent(filetype)
bool filetype;
{
extern int cifMakeBoundaryFunc(); /* Forward declaration. */
extern int cifPaintCurrentFunc(); /* Forward declaration. */
Plane *plane, *swapplane;
int i;
for (i = 0; i < cifCurReadStyle->crs_nLayers; i++)
{
TileType type;
extern int cifPaintCurrentFunc(); /* Forward declaration. */
CIFOp *op;
plane = CIFGenLayer(cifCurReadStyle->crs_layers[i]->crl_ops,
@ -641,6 +644,23 @@ CIFPaintCurrent()
}
}
}
else if (op == NULL)
{
/* Handle boundary layer */
op = cifCurReadStyle->crs_layers[i]->crl_ops;
while (op)
{
if (op->co_opcode == CIFOP_BOUNDARY) break;
op = op->co_next;
}
if (op && (DBSrPaintArea((Tile *)NULL, plane, &TiPlaneRect,
&DBAllButSpaceBits, cifCheckPaintFunc,
(ClientData)NULL) == 1))
DBSrPaintArea((Tile *) NULL, plane, &TiPlaneRect,
&CIFSolidBits, cifMakeBoundaryFunc, (ClientData)filetype);
}
/* Swap planes */
swapplane = cifCurReadPlanes[type];
@ -652,8 +672,8 @@ CIFPaintCurrent()
DBSrPaintArea((Tile *) NULL, plane, &TiPlaneRect,
&CIFSolidBits, cifPaintCurrentFunc,
(ClientData)type);
}
}
/* Recycle the plane, which was dynamically allocated. */
DBFreePaintPlane(plane);
@ -668,9 +688,86 @@ CIFPaintCurrent()
return 0;
}
/* Below is the search function invoked for each CIF tile type
* found for the current layer.
*/
/* Use CIF layer geometry to define a fixed bounding box for the current cell */
int
cifMakeBoundaryFunc(tile, clientdata)
Tile *tile; /* Tile of CIF information. */
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 */
/* layer, then the last one defines the FIXED_BBOX property. */
Rect area;
char propertyvalue[128], *storedvalue;
int savescale;
bool filetype = (bool)clientdata;
TiToRect(tile, &area);
area.r_xtop = CIFScaleCoord(area.r_xtop, COORD_EXACT);
savescale = cifCurReadStyle->crs_scaleFactor;
area.r_ytop = CIFScaleCoord(area.r_ytop, COORD_EXACT);
if (savescale != cifCurReadStyle->crs_scaleFactor)
{
area.r_xtop *= (savescale / cifCurReadStyle->crs_scaleFactor);
savescale = cifCurReadStyle->crs_scaleFactor;
}
area.r_xbot = CIFScaleCoord(area.r_xbot, COORD_EXACT);
if (savescale != cifCurReadStyle->crs_scaleFactor)
{
area.r_xtop *= (savescale / cifCurReadStyle->crs_scaleFactor);
area.r_ytop *= (savescale / cifCurReadStyle->crs_scaleFactor);
savescale = cifCurReadStyle->crs_scaleFactor;
}
area.r_ybot = CIFScaleCoord(area.r_ybot, COORD_EXACT);
if (savescale != cifCurReadStyle->crs_scaleFactor)
{
area.r_xtop *= (savescale / cifCurReadStyle->crs_scaleFactor);
area.r_ytop *= (savescale / cifCurReadStyle->crs_scaleFactor);
area.r_xbot *= (savescale / cifCurReadStyle->crs_scaleFactor);
}
if (cifReadCellDef->cd_flags & CDFIXEDBBOX)
{
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);
storedvalue = StrDup((char **)NULL, propertyvalue);
DBPropPut(cifReadCellDef, "FIXED_BBOX", storedvalue);
cifReadCellDef->cd_flags |= CDFIXEDBBOX;
return 0;
}
/* Paint CIF layer geometry into the current cell def as magic layer "type" */
int
cifPaintCurrentFunc(tile, type)
@ -773,7 +870,7 @@ CIFParseFinish()
* layer info.
*/
CIFPaintCurrent();
CIFPaintCurrent(FILE_CIF);
DBAdjustLabels(cifReadCellDef, &TiPlaneRect);
DBReComputeBbox(cifReadCellDef);
@ -1321,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;
@ -1332,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();
}
@ -1348,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);
@ -1373,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,
@ -1417,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 */
@ -1430,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);

View File

@ -234,9 +234,10 @@ CIFParseFlash()
*/
void
CIFPropRecordPath(def, pathheadp, iswire)
CIFPropRecordPath(def, pathheadp, iswire, propname)
CellDef *def;
CIFPath *pathheadp;
char *propname;
{
extern float CIFGetOutputScale();
CIFPath *pathp;
@ -273,7 +274,7 @@ CIFPropRecordPath(def, pathheadp, iswire)
/* Reallocate pathstr to be no larger than needed to hold the path contents */
StrDup(&pathstr, pathstr);
DBPropPut(def, "path", (ClientData)pathstr);
DBPropPut(def, propname, (ClientData)pathstr);
}
/*

View File

@ -62,9 +62,6 @@ CIFOp *cifCurReadOp; /* Last geometric operation seen. */
void cifReadStyleInit();
void CIFReadLoadStyle();
/* Label types used by the "labels" statement option */
typedef enum { LABEL_TYPE_NONE, LABEL_TYPE_TEXT, LABEL_TYPE_PORT } labelType;
/*
* ----------------------------------------------------------------------------
*
@ -858,6 +855,8 @@ CIFReadTechLine(sectionName, argc, argv)
calmaLabelType = LABEL_TYPE_TEXT;
else if (!strcmp(argv[2], "port"))
calmaLabelType = LABEL_TYPE_PORT;
else if (!strncmp(argv[2], "cell", 4))
calmaLabelType = LABEL_TYPE_CELLID;
else
goto wrongNumArgs;
}
@ -952,6 +951,8 @@ CIFReadTechLine(sectionName, argc, argv)
newOp->co_opcode = CIFOP_SHRINK;
else if (strcmp(argv[0], "copyup") == 0)
newOp->co_opcode = CIFOP_COPYUP;
else if (strcmp(argv[0], "boundary") == 0)
newOp->co_opcode = CIFOP_BOUNDARY;
else
{
TechError("Unknown statement \"%s\".\n", argv[0]);
@ -967,7 +968,6 @@ CIFReadTechLine(sectionName, argc, argv)
if (argc != 2) goto wrongNumArgs;
CIFParseReadLayers(argv[1], &newOp->co_cifMask);
break;
case CIFOP_GROW:
case CIFOP_GROW_G:
case CIFOP_SHRINK:

View File

@ -1660,6 +1660,6 @@ CIFReadFile(file)
CIFReadError("no \"End\" statement.\n");
done:
CIFReadCellCleanup(0);
CIFReadCellCleanup(FILE_CIF);
UndoEnable();
}

View File

@ -54,8 +54,8 @@ typedef struct
* the "crl_magicType" should be interpreted as a CIF layer.
*/
#define CIFR_SIMPLE 1
#define CIFR_TEMPLAYER 2
#define CIFR_SIMPLE 1
#define CIFR_TEMPLAYER 2
/* The following structure defines a complete CIF read-in style.
* The constant MAXCIFRLAYERS must be less than TT_MAXTYPES, and

View File

@ -104,6 +104,7 @@ cifTechFreeStyle()
case CIFOP_OR:
case CIFOP_BBOX:
case CIFOP_MAXRECT:
case CIFOP_BOUNDARY:
/* These options use co_client to hold a single */
/* integer value, so it is not allocated. */
break;
@ -802,8 +803,7 @@ CIFTechLine(sectionName, argc, argv)
if (CIFCurStyle->cs_status != TECH_PENDING) return TRUE;
newLayer = NULL;
if ((strcmp(argv[0], "templayer") == 0)
|| (strcmp(argv[0], "layer") == 0))
if ((strcmp(argv[0], "templayer") == 0) || (strcmp(argv[0], "layer") == 0))
{
if (CIFCurStyle->cs_nLayers == MAXCIFLAYERS)
{
@ -1047,6 +1047,8 @@ CIFTechLine(sectionName, argc, argv)
newOp->co_opcode = CIFOP_NET;
else if (strcmp(argv[0], "maxrect") == 0)
newOp->co_opcode = CIFOP_MAXRECT;
else if (strcmp(argv[0], "boundary") == 0)
newOp->co_opcode = CIFOP_BOUNDARY;
else
{
TechError("Unknown statement \"%s\".\n", argv[0]);
@ -1196,6 +1198,12 @@ bloatCheck:
goto wrongNumArgs;
break;
case CIFOP_BOUNDARY:
/* CIFOP_BOUNDARY has no arguments */
if (argc != 1)
goto wrongNumArgs;
break;
case CIFOP_SQUARES_G:
case CIFOP_SQUARES:
@ -1752,6 +1760,7 @@ CIFTechFinal()
{
case CIFOP_OR:
case CIFOP_BBOX:
case CIFOP_BOUNDARY:
case CIFOP_MAXRECT:
case CIFOP_NET:
break;
@ -1846,6 +1855,24 @@ CIFTechFinal()
}
}
/* Added by Tim, 5/16/19 */
/* Layers that depend on hierarchically generated layers */
/* (i.e., templayers) must themselves be hierarchically */
/* processed. */
for (i = 0; i < style->cs_nLayers; i++)
{
TileTypeBitMask ourDepend, mmask;
ourDepend = DBZeroTypeBits;
for (op = style->cs_layers[i]->cl_ops; op != NULL; op = op->co_next)
TTMaskSetMask(&ourDepend, &op->co_cifMask);
TTMaskAndMask3(&mmask, &ourDepend, &style->cs_hierLayers);
if (!TTMaskIsZero(&mmask))
TTMaskSetType(&style->cs_hierLayers, i);
}
/* Added by Tim, 10/18/04 */
/* Go through the layer operators looking for those that */
@ -2214,6 +2241,7 @@ CIFTechOutputScale(n, d)
{
case CIFOP_OR:
case CIFOP_BBOX:
case CIFOP_BOUNDARY:
case CIFOP_MAXRECT:
case CIFOP_NET:
break;

View File

@ -1,44 +1,68 @@
CIFgen.o: CIFgen.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../cif/CIFint.h ../calma/calma.h \
../commands/commands.h ../windows/windows.h ../select/selInt.h \
../utils/stack.h ../utils/malloc.h ../utils/maxrect.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../cif/CIFint.h ../calma/calma.h ../commands/commands.h \
../windows/windows.h ../select/selInt.h ../utils/stack.h \
../utils/malloc.h ../utils/maxrect.h
CIFhier.o: CIFhier.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../cif/CIFint.h ../cif/cif.h \
../drc/drc.h ../textio/textio.h ../utils/undo.h ../utils/malloc.h \
../utils/signals.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../cif/CIFint.h ../cif/cif.h ../drc/drc.h ../textio/textio.h \
../utils/undo.h ../utils/malloc.h ../utils/signals.h
CIFmain.o: CIFmain.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../cif/CIFint.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../cif/CIFint.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/styles.h
CIFrdcl.o: CIFrdcl.c ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h ../utils/undo.h \
../database/database.h ../cif/CIFint.h ../cif/CIFread.h ../utils/utils.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h ../drc/drc.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../cif/CIFint.h ../cif/CIFread.h ../cif/cif.h \
../calma/calma.h ../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../drc/drc.h
CIFrdpt.o: CIFrdpt.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../utils/malloc.h ../database/database.h \
../windows/windows.h ../utils/main.h ../cif/CIFint.h ../cif/CIFread.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h \
../cif/CIFint.h ../cif/CIFread.h
CIFrdpoly.o: CIFrdpoly.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../cif/CIFint.h \
../cif/CIFread.h ../utils/malloc.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../cif/CIFint.h ../cif/CIFread.h ../utils/malloc.h
CIFrdtech.o: CIFrdtech.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/tech.h ../textio/textio.h \
../utils/utils.h ../cif/CIFint.h ../cif/CIFread.h ../calma/calmaInt.h \
../utils/malloc.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/tech.h ../textio/textio.h ../cif/CIFint.h \
../cif/CIFread.h ../calma/calmaInt.h ../utils/malloc.h
CIFrdutils.o: CIFrdutils.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../cif/CIFint.h \
../cif/CIFread.h ../cif/cif.h ../textio/textio.h ../utils/signals.h \
../utils/undo.h ../utils/malloc.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../cif/CIFint.h ../cif/CIFread.h ../cif/cif.h \
../textio/textio.h ../utils/signals.h ../utils/undo.h ../utils/malloc.h
CIFsee.o: CIFsee.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../windows/windows.h \
../graphics/graphics.h ../dbwind/dbwind.h ../utils/styles.h \
../cif/CIFint.h ../textio/textio.h ../utils/undo.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../graphics/graphics.h ../dbwind/dbwind.h \
../utils/styles.h ../cif/CIFint.h ../textio/textio.h ../utils/undo.h
CIFtech.o: CIFtech.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../utils/tech.h ../utils/utils.h \
../utils/styles.h ../cif/CIFint.h ../calma/calmaInt.h ../textio/textio.h \
../utils/malloc.h ../cif/cif.h ../drc/drc.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../utils/tech.h ../utils/styles.h ../cif/CIFint.h ../calma/calmaInt.h \
../textio/textio.h ../utils/malloc.h ../cif/cif.h ../drc/drc.h
CIFwrite.o: CIFwrite.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/utils.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../utils/tech.h ../utils/stack.h \
../utils/undo.h ../cif/cif.h ../cif/CIFint.h ../utils/signals.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/styles.h \

View File

@ -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;

View File

@ -1,15 +1,19 @@
CMWmain.o: CMWmain.c ../utils/magic.h ../utils/geometry.h \
../windows/windows.h ../database/database.h ../tiles/tile.h \
../utils/hash.h ../utils/main.h ../commands/commands.h \
../utils/hash.h ../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/main.h ../commands/commands.h \
../cmwind/cmwind.h ../textio/txcommands.h ../graphics/graphicsInt.h \
../graphics/graphics.h ../textio/textio.h ../utils/utils.h \
../utils/styles.h ../graphics/glyphs.h ../utils/malloc.h
../graphics/graphics.h ../textio/textio.h ../utils/styles.h \
../graphics/glyphs.h ../utils/malloc.h
CMWcmmnds.o: CMWcmmnds.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../windows/windows.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../dbwind/dbwind.h ../utils/main.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../dbwind/dbwind.h ../utils/main.h \
../commands/commands.h ../cmwind/cmwind.h ../textio/txcommands.h \
../graphics/graphics.h ../textio/textio.h ../utils/utils.h \
../utils/styles.h ../utils/undo.h
../graphics/graphics.h ../textio/textio.h ../utils/styles.h \
../utils/undo.h
CMWundo.o: CMWundo.c ../utils/magic.h ../utils/geometry.h \
../graphics/graphics.h ../windows/windows.h ../cmwind/cmwind.h \
../textio/txcommands.h ../utils/undo.h

View File

@ -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,

View File

@ -1004,6 +1004,54 @@ CmdPolygon(w, cmd)
freeMagic(plist);
}
/*----------------------------------------------------------------------*/
/* cmdPortLabelFunc() --- */
/*----------------------------------------------------------------------*/
int
cmdPortLabelFunc1(scx, label, tpath, cdata)
SearchContext *scx;
Label *label;
TerminalPath *tpath;
ClientData cdata;
{
Label **rlab = (Label **)cdata;
if (GEO_SURROUND(&scx->scx_area, &label->lab_rect))
{
if (*rlab != NULL)
{
// More than one label in the area; ambiguous.
*rlab = NULL;
return 1;
}
*rlab = label;
}
return 0;
}
int
cmdPortLabelFunc2(scx, label, tpath, cdata)
SearchContext *scx;
Label *label;
TerminalPath *tpath;
ClientData cdata;
{
Label **rlab = (Label **)cdata;
if (GEO_OVERLAP(&scx->scx_area, &label->lab_rect))
{
if (*rlab != NULL)
{
// More than one label in the area; ambiguous.
*rlab = NULL;
return 1;
}
*rlab = label;
}
return 0;
}
/*----------------------------------------------------------------------*/
/* portFindLabel --- */
/* */
@ -1015,12 +1063,13 @@ CmdPolygon(w, cmd)
/*----------------------------------------------------------------------*/
Label *
portFindLabel(editDef, port, unique)
portFindLabel(editDef, port, unique, nonEdit)
CellDef *editDef;
bool unique;
bool port;
bool *nonEdit; // TRUE if label is not in the edit cell
{
bool found;
int found;
Label *lab, *sl;
Rect editBox;
@ -1029,33 +1078,62 @@ portFindLabel(editDef, port, unique)
*/
ToolGetEditBox(&editBox);
found = FALSE;
found = 0;
if (nonEdit) *nonEdit = FALSE;
lab = NULL;
for (sl = editDef->cd_labels; sl != NULL; sl = sl->lab_next)
{
if (GEO_OVERLAP(&editBox, &sl->lab_rect))
{
if (found == TRUE)
if (found > 0)
{
/* Let's do this again with the GEO_SURROUND function */
/* and see if we come up with only one label. */
found = FALSE;
found = 0;
for (sl = editDef->cd_labels; sl != NULL; sl = sl->lab_next)
{
if (GEO_SURROUND(&editBox, &sl->lab_rect))
{
if (found == TRUE && unique == TRUE) return NULL;
if (found > 0 && unique == TRUE) return NULL;
lab = sl;
found = TRUE;
found++;
}
}
break;
}
lab = sl;
found = TRUE;
found++;
if (nonEdit) *nonEdit = FALSE;
}
}
/* If no label was found, then search the hierarchy under the box. */
/* The calling routine may determine whether a label that is not in */
/* the edit cell may be valid for the command (e.g., if querying */
/* but not changing values). */
if (found == 0)
{
SearchContext scx;
scx.scx_area = editBox;
scx.scx_use = EditCellUse;
scx.scx_trans = GeoIdentityTransform;
/* First check for exactly one label surrounded by the cursor box. */
/* If that fails, check for exactly one label overlapping the */
/* cursor box. */
DBTreeSrLabels(&scx, &DBAllButSpaceBits, 0, NULL, TF_LABEL_ATTACH,
cmdPortLabelFunc1, (ClientData) &lab);
if (lab == NULL)
DBTreeSrLabels(&scx, &DBAllButSpaceBits, 0, NULL, TF_LABEL_ATTACH,
cmdPortLabelFunc2, (ClientData) &lab);
if (lab != NULL)
if (nonEdit) *nonEdit = TRUE;
}
return lab;
}
/*
@ -1121,6 +1199,7 @@ CmdPort(w, cmd)
int i, idx, pos, type, option, argc;
unsigned short dirmask;
bool found;
bool nonEdit = FALSE;
Label *lab, *sl;
Rect editBox, tmpArea;
CellDef *editDef = EditCellUse->cu_def;
@ -1254,7 +1333,7 @@ CmdPort(w, cmd)
if (option != PORT_LAST)
{
if (lab == NULL)
lab = portFindLabel(editDef, TRUE, TRUE);
lab = portFindLabel(editDef, TRUE, TRUE, &nonEdit);
if (option == PORT_EXISTS)
{
@ -1297,6 +1376,17 @@ CmdPort(w, cmd)
}
}
/* Check for options that cannot operate on a non-edit cell label */
if (nonEdit)
{
if ((option == PORT_MAKE) || (option == PORT_MAKEALL) ||
(option == PORT_REMOVE) || (argc == 3))
{
TxError("Cannot modify a port in an non-edit cell.\n");
return;
}
}
/* Handle all command options */
switch (option)
{

View File

@ -1349,7 +1349,8 @@ Okay:
* click" code.
*/
if ((cmd->tx_argc == 3) && (optionArgs == &cmd->tx_argv[2]))
if ((cmd->tx_argc == 3) && (optionArgs == &cmd->tx_argv[2]) &&
(more == FALSE) && (less == FALSE))
{
use = lastUse = scx.scx_use;
p.p_x = scx.scx_use->cu_xlo;

View File

@ -1348,7 +1348,7 @@ CmdWire(w, cmd)
case DECREMENT:
if (cmd->tx_argc != 3 && cmd->tx_argc != 4)
goto badargs;
if (!strcmp(cmd->tx_argv[2], "type"))
if (!strcmp(cmd->tx_argv[2], "type") || !strcmp(cmd->tx_argv[2], "layer"))
{
Contact *contact;
type = TT_SPACE;
@ -1371,7 +1371,7 @@ CmdWire(w, cmd)
else
{
width = DRCGetDefaultLayerWidth(type);
WireAddContact(type, width);
WireAddContact(type, (WireWidth < width) ? width : WireWidth);
}
}
else if (!strcmp(cmd->tx_argv[2], "width"))
@ -1411,7 +1411,7 @@ CmdWire(w, cmd)
else
{
width = DRCGetDefaultLayerWidth(type);
WireAddContact(type, width);
WireAddContact(type, (WireWidth < width) ? width : WireWidth);
}
}
else if (!strcmp(cmd->tx_argv[2], "width"))
@ -1736,17 +1736,20 @@ CmdWriteall(w, cmd)
int cmdWriteallFunc();
static char *force[] = { "force", 0 };
int argc;
int flags = CDMODIFIED | CDBOXESCHANGED | CDSTAMPSCHANGED;
if ((cmd->tx_argc >= 2) && (Lookup(cmd->tx_argv[1], force) < 0))
if (cmd->tx_argc >= 2)
{
TxError("Usage: %s [force [cellname ...]]\n", cmd->tx_argv[0]);
return;
flags = 0;
if (Lookup(cmd->tx_argv[1], force) < 0)
{
TxError("Usage: %s [force [cellname ...]]\n", cmd->tx_argv[0]);
return;
}
}
DBUpdateStamps();
argc = cmd->tx_argc;
(void) DBCellSrDefs(CDMODIFIED|CDBOXESCHANGED|CDSTAMPSCHANGED,
cmdWriteallFunc, (ClientData)cmd);
(void) DBCellSrDefs(flags, cmdWriteallFunc, (ClientData)cmd);
cmd->tx_argc = argc;
}

View File

@ -1,62 +1,81 @@
CmdSubrs.o: CmdSubrs.c ../utils/magic.h ../utils/geometry.h \
../utils/utils.h ../database/database.h ../tiles/tile.h ../utils/hash.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../commands/commands.h ../textio/textio.h ../cif/cif.h ../drc/drc.h \
../textio/txcommands.h ../utils/undo.h ../utils/macros.h ../sim/sim.h \
../select/select.h
CmdAB.o: CmdAB.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../commands/commands.h ../utils/utils.h ../textio/textio.h ../drc/drc.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../commands/commands.h ../textio/textio.h ../drc/drc.h \
../cif/cif.h ../graphics/graphics.h ../textio/txcommands.h \
../utils/malloc.h ../utils/netlist.h ../select/select.h
CmdCD.o: CmdCD.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../commands/commands.h ../utils/utils.h ../textio/textio.h ../drc/drc.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../commands/commands.h ../textio/textio.h ../drc/drc.h \
../graphics/graphics.h ../textio/txcommands.h ../cif/cif.h \
../calma/calma.h ../utils/styles.h ../router/rtrDcmpose.h \
../select/select.h ../utils/signals.h ../utils/malloc.h ../cif/CIFint.h \
../cif/CIFread.h
CmdE.o: CmdE.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/styles.h \
../utils/geometry.h ../utils/utils.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../graphics/graphics.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../utils/main.h ../commands/commands.h \
../textio/textio.h ../utils/macros.h ../drc/drc.h ../textio/txcommands.h \
../extract/extract.h ../select/select.h
CmdFI.o: CmdFI.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/geometry.h \
../utils/utils.h ../utils/undo.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../commands/commands.h ../textio/textio.h \
../utils/macros.h ../drc/drc.h ../textio/txcommands.h ../utils/styles.h \
../graphics/graphics.h ../extract/extract.h ../utils/malloc.h \
../select/select.h ../sim/sim.h ../gcr/gcr.h
CmdLQ.o: CmdLQ.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../utils/utils.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/fonts.h ../windows/windows.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/fonts.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/main.h ../commands/commands.h \
../textio/textio.h ../graphics/graphics.h ../drc/drc.h \
../textio/txcommands.h ../utils/undo.h ../select/select.h \
../netmenu/netmenu.h
CmdRS.o: CmdRS.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/stack.h \
../utils/geometry.h ../utils/utils.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/fonts.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/main.h ../commands/commands.h \
../textio/textio.h ../graphics/graphics.h ../utils/tech.h ../drc/drc.h \
../textio/txcommands.h ../utils/malloc.h ../utils/netlist.h \
../netmenu/netmenu.h ../select/select.h ../utils/signals.h ../sim/sim.h
../utils/styles.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/geofast.h ../bplane/bplaneInt.h ../database/fonts.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../commands/commands.h ../textio/textio.h ../graphics/graphics.h \
../utils/tech.h ../drc/drc.h ../textio/txcommands.h ../utils/malloc.h \
../utils/netlist.h ../netmenu/netmenu.h ../select/select.h \
../utils/signals.h ../sim/sim.h
CmdTZ.o: CmdTZ.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../utils/utils.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../commands/commands.h ../textio/textio.h \
../textio/txcommands.h ../utils/signals.h ../utils/undo.h \
../select/select.h ../utils/styles.h ../wiring/wiring.h \
../utils/netlist.h ../netmenu/netmenu.h ../utils/tech.h ../drc/drc.h
CmdWizard.o: CmdWizard.c ../utils/magic.h ../utils/geometry.h \
../utils/malloc.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../commands/commands.h ../utils/runstats.h ../textio/textio.h \
../graphics/graphics.h ../utils/signals.h ../utils/utils.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../commands/commands.h ../utils/runstats.h \
../textio/textio.h ../graphics/graphics.h ../utils/signals.h \
../textio/txcommands.h
CmdAuto.o: CmdAuto.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../windows/windows.h ../textio/txcommands.h

2
configure vendored
View File

@ -9,4 +9,4 @@
# script itself. It also sets up CFLAGS without the default optimizer
# flag (-O2).
( CFLAGS="-g"; export CFLAGS; cd scripts ; ./configure $* )
( CFLAGS="-g"; export CFLAGS; cd scripts ; ./configure "$@" )

View File

@ -1767,8 +1767,8 @@ donecell:
DBScalePoint(&cellDef->cd_extended.r_ll, scalen, scaled);
DBScalePoint(&cellDef->cd_extended.r_ur, scalen, scaled);
/* If the cell is an abstract view with a fixed bounding box, then */
/* adjust the bounding box property to match the new scale. */
/* If the cell is an abstract view with a fixed bounding box, then */
/* adjust the bounding box property to match the new scale. */
if ((cellDef->cd_flags & CDFIXEDBBOX) != 0)
{
@ -1791,9 +1791,7 @@ donecell:
DBPropPut(cellDef, "FIXED_BBOX", propval);
}
}
}
return 0;
}

View File

@ -152,7 +152,8 @@ dbCopyDefFunc(use, def)
* DBCellClearDef --
*
* Empties out all tile planes of the indicated CellDef, making it
* as though the def had been newly allocated.
* as though the def had been newly allocated. This also removes all
* labels and all properties from the cell.
*
* Results:
* None.
@ -205,6 +206,10 @@ DBCellClearDef(cellDef)
freeMagic((char *) lab);
cellDef->cd_labels = (Label *) NULL;
cellDef->cd_lastLabel = (Label *) NULL;
/* Remove all defined properties */
DBPropClearAll(cellDef);
SigEnableInterrupts();
}

View File

@ -700,15 +700,14 @@ dbcConnectLabelFunc(scx, lab, tpath, csa2)
/* Check for equivalent ports. For any found, call */
/* DBTreeSrTiles recursively on the type and area */
/* of the label. */
/* Don't recurse, just add area to the csa2_list. */
/* To avoid infinite recursion, only look at labels */
/* forward of the currently searched label, and only */
/* add the next one to the list. If there are more */
/* equivalent ports, they will be found when processing */
/* this label's area. */
for (slab = lab->lab_next; slab != NULL; slab = slab->lab_next)
if (slab->lab_flags & PORT_DIR_MASK)
/* Don't recurse, just add area to the csa2_list. */
/* Only add the next label found to the list. If there */
/* are more equivalent ports, they will be found when */
/* processing this label's area. */
for (slab = orig_def->cd_labels; slab != NULL; slab = slab->lab_next)
if ((slab->lab_flags & PORT_DIR_MASK) && (slab != lab))
if ((slab->lab_flags & PORT_NUM_MASK) == lidx)
{
Rect newarea;
@ -1036,36 +1035,37 @@ DBTreeCopyConnect(scx, mask, xMask, connect, area, destUse)
else
DBTreeSrTiles(scx, newmask, xMask, dbcConnectFunc, (ClientData) &csa2);
/* Check the source def for any labels belonging to this */
/* tile area and plane, and add them to the destination. */
/* Check the source def for any labels belonging to this */
/* tile area and plane, and add them to the destination. */
/* (This code previously in dbcConnectFunc, but the change to */
/* BPlane for cells means that the cell search cannot be run */
/* from the top within another cell search.) */
/* (This code previously in dbcConnectFunc, but moved to avoid */
/* running the cell search from the top within another cell */
/* search, which creates deep stacks and can trigger stack */
/* overflow.) */
searchtype = TF_LABEL_ATTACH;
searchtype = TF_LABEL_ATTACH;
if (newtype & TT_DIAGONAL)
{
/* If the tile is split, then labels attached to the */
/* opposite point of the triangle are NOT connected. */
{
/* If the tile is split, then labels attached to the */
/* opposite point of the triangle are NOT connected. */
if (newtype & TT_SIDE)
{
if (newtype & TT_DIRECTION)
searchtype |= TF_LABEL_ATTACH_NOT_SW;
else
searchtype |= TF_LABEL_ATTACH_NOT_NW;
if (newtype & TT_SIDE)
{
if (newtype & TT_DIRECTION)
searchtype |= TF_LABEL_ATTACH_NOT_SW;
else
searchtype |= TF_LABEL_ATTACH_NOT_NW;
}
else
{
if (newtype & TT_DIRECTION)
searchtype |= TF_LABEL_ATTACH_NOT_NE;
else
searchtype |= TF_LABEL_ATTACH_NOT_SE;
if (newtype & TT_DIRECTION)
searchtype |= TF_LABEL_ATTACH_NOT_NE;
else
searchtype |= TF_LABEL_ATTACH_NOT_SE;
}
}
DBTreeSrLabels(scx, newmask, xMask, NULL, searchtype,
dbcConnectLabelFunc, (ClientData) &csa2);
dbcConnectLabelFunc, (ClientData) &csa2);
}
freeMagic((char *)csa2.csa2_list);

View File

@ -1623,6 +1623,7 @@ dbReadProperties(cellDef, line, len, f, scalen, scaled)
locbbox.r_xbot, locbbox.r_ybot,
locbbox.r_xtop, locbbox.r_ytop);
(void) DBPropPut(cellDef, propertyname, storedvalue);
}
}
else

View File

@ -55,6 +55,7 @@ DBPropPut(cellDef, name, value)
{
HashTable *htab;
HashEntry *entry;
char *oldvalue;
/* Honor the NOEDIT flag */
if (cellDef->cd_flags & CDNOEDIT) return;
@ -67,6 +68,8 @@ DBPropPut(cellDef, name, value)
htab = (HashTable *) cellDef->cd_props;
entry = HashFind(htab, name);
oldvalue = (char *)HashGetValue(entry);
if (oldvalue != NULL) freeMagic(oldvalue);
HashSetValue(entry, value);
}

View File

@ -1,96 +1,153 @@
DBbound.o: DBbound.c ../utils/magic.h ../utils/geometry.h \
../database/database.h ../tiles/tile.h ../utils/hash.h
../database/database.h ../tiles/tile.h ../utils/hash.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h
DBcell.o: DBcell.c ../utils/magic.h ../utils/malloc.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../database/databaseInt.h ../utils/undo.h ../utils/signals.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/undo.h \
../utils/signals.h
DBcellbox.o: DBcellbox.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/databaseInt.h ../windows/windows.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/undo.h
DBcellcopy.o: DBcellcopy.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../utils/malloc.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/databaseInt.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../commands/commands.h
DBcellname.o: DBcellname.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/hash.h ../utils/utils.h ../utils/geometry.h ../tiles/tile.h \
../database/database.h ../database/databaseInt.h ../select/select.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../select/select.h \
../utils/signals.h ../utils/undo.h ../utils/malloc.h \
../windows/windows.h ../textio/textio.h ../dbwind/dbwind.h \
../utils/main.h ../drc/drc.h
DBcellsrch.o: DBcellsrch.c ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/databaseInt.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../textio/textio.h \
../utils/signals.h ../windows/windows.h ../utils/main.h \
../mzrouter/mzrouter.h ../utils/list.h
DBcellsel.o: DBcellsel.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../database/databaseInt.h ../utils/utils.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h
DBcellsubr.o: DBcellsubr.c ../utils/magic.h ../utils/malloc.h \
../utils/hash.h ../utils/utils.h ../utils/geometry.h ../tiles/tile.h \
../database/database.h ../database/databaseInt.h ../utils/signals.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/signals.h
DBconnect.o: DBconnect.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../database/databaseInt.h ../utils/signals.h ../utils/malloc.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/signals.h \
../utils/malloc.h
DBcount.o: DBcount.c ../utils/magic.h ../utils/hash.h ../utils/geometry.h \
../tiles/tile.h ../database/database.h ../database/databaseInt.h
../tiles/tile.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h
DBexpand.o: DBexpand.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../database/databaseInt.h ../textio/textio.h ../utils/utils.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../textio/textio.h \
../utils/stack.h
DBio.o: DBio.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/utils.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../database/fonts.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/tech.h ../textio/textio.h ../drc/drc.h \
../utils/undo.h ../utils/malloc.h ../utils/signals.h
DBlabel.o: DBlabel.c ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h ../utils/utils.h \
../database/database.h ../database/fonts.h ../database/databaseInt.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/fonts.h ../database/databaseInt.h \
../windows/windows.h ../dbwind/dbwind.h ../commands/commands.h \
../textio/textio.h
DBlabel2.o: DBlabel2.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../database/databaseInt.h ../utils/malloc.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/malloc.h
DBpaint2.o: DBpaint2.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../database/databaseInt.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h
DBpaint.o: DBpaint.c ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/databaseInt.h ../windows/windows.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../windows/windows.h \
../graphics/graphics.h ../dbwind/dbwind.h ../utils/signals.h \
../textio/textio.h ../utils/undo.h
DBprop.o: DBprop.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../utils/malloc.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../utils/malloc.h
DBtech.o: DBtech.c ../utils/magic.h ../utils/geometry.h ../utils/utils.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../utils/tech.h ../textio/textio.h \
../utils/malloc.h
DBtcontact.o: DBtcontact.c ../utils/magic.h ../utils/geometry.h \
../utils/utils.h ../utils/malloc.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/databaseInt.h ../utils/tech.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/tech.h \
../textio/textio.h
DBtechname.o: DBtechname.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/utils.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/databaseInt.h ../utils/tech.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/tech.h \
../textio/textio.h ../utils/malloc.h
DBtpaint.o: DBtpaint.c ../utils/magic.h ../utils/geometry.h \
../utils/utils.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../utils/tech.h ../textio/textio.h
DBtpaint2.o: DBtpaint2.c ../utils/magic.h ../utils/geometry.h \
../utils/utils.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../utils/tech.h ../textio/textio.h
DBtechtype.o: DBtechtype.c ../utils/magic.h ../utils/geometry.h \
../utils/utils.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../utils/tech.h ../textio/textio.h \
../utils/malloc.h
DBtiles.o: DBtiles.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/signals.h ../utils/hash.h ../database/database.h \
../database/databaseInt.h ../utils/malloc.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/malloc.h
DBtimestmp.o: DBtimestmp.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../database/databaseInt.h ../windows/windows.h ../textio/textio.h \
../drc/drc.h ../utils/signals.h ../utils/malloc.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../windows/windows.h \
../textio/textio.h ../drc/drc.h ../utils/signals.h ../utils/malloc.h
DBundo.o: DBundo.c ../utils/magic.h ../utils/malloc.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../database/databaseInt.h ../utils/undo.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/main.h ../utils/utils.h ../drc/drc.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/undo.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h ../drc/drc.h \
../utils/signals.h

View File

@ -1,41 +1,61 @@
DBWcommands.o: DBWcommands.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../commands/commands.h ../textio/textio.h ../textio/txcommands.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../commands/commands.h ../textio/textio.h \
../textio/txcommands.h
DBWdisplay.o: DBWdisplay.c ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../utils/utils.h ../dbwind/dbwtech.h \
../utils/styles.h ../utils/main.h ../utils/tech.h ../utils/signals.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../dbwind/dbwtech.h ../utils/styles.h ../utils/main.h \
../utils/tech.h ../utils/signals.h
DBWbuttons.o: DBWbuttons.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../graphics/graphics.h ../dbwind/dbwind.h \
../utils/styles.h ../textio/textio.h ../textio/txcommands.h \
../utils/utils.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../utils/styles.h ../textio/textio.h \
../textio/txcommands.h
DBWelement.o: DBWelement.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../utils/utils.h ../utils/styles.h ../utils/malloc.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../utils/styles.h ../utils/malloc.h \
../utils/signals.h
DBWfdback.o: DBWfdback.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../graphics/graphics.h ../dbwind/dbwind.h \
../utils/utils.h ../utils/styles.h ../utils/malloc.h ../utils/signals.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../utils/styles.h ../utils/malloc.h \
../utils/signals.h
DBWhlights.o: DBWhlights.c ../utils/magic.h ../utils/geometry.h \
../utils/styles.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../graphics/graphics.h ../dbwind/dbwind.h \
../textio/textio.h ../graphics/graphicsInt.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../textio/textio.h ../graphics/graphicsInt.h
DBWprocs.o: DBWprocs.c ../utils/main.h ../windows/windows.h \
../utils/magic.h ../utils/geometry.h ../database/database.h \
../tiles/tile.h ../utils/hash.h ../commands/commands.h \
../dbwind/dbwind.h ../graphics/graphics.h ../textio/textio.h \
../textio/txcommands.h ../utils/utils.h ../utils/undo.h \
../graphics/glyphs.h ../utils/malloc.h ../utils/styles.h
../tiles/tile.h ../utils/hash.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../commands/commands.h ../dbwind/dbwind.h \
../graphics/graphics.h ../textio/textio.h ../textio/txcommands.h \
../utils/undo.h ../graphics/glyphs.h ../utils/malloc.h ../utils/styles.h
DBWtools.o: DBWtools.c ../utils/magic.h ../utils/geometry.h \
../utils/styles.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../graphics/graphics.h ../dbwind/dbwind.h \
../textio/textio.h ../utils/main.h ../textio/txcommands.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../textio/textio.h ../utils/main.h \
../textio/txcommands.h
DBWundo.o: DBWundo.c ../utils/magic.h ../utils/geometry.h \
../windows/windows.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/main.h ../dbwind/dbwind.h \
../utils/undo.h ../textio/textio.h ../commands/commands.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/main.h ../dbwind/dbwind.h ../utils/undo.h \
../textio/textio.h ../commands/commands.h

View File

@ -1,5 +1,8 @@
debugFlags.o: debugFlags.c ../utils/magic.h ../debug/debug.h \
../textio/textio.h ../utils/malloc.h ../utils/utils.h
hist.o: hist.c ../utils/magic.h ../utils/geometry.h \
../database/database.h ../tiles/tile.h ../utils/hash.h ../utils/utils.h \
../textio/textio.h ../debug/debug.h ../utils/malloc.h
../database/database.h ../tiles/tile.h ../utils/hash.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../textio/textio.h ../debug/debug.h \
../utils/malloc.h

View File

@ -62,16 +62,16 @@ LIB_SPECS_NOSTUB = -L/usr/lib64 -ltk8.6 -L/usr/lib64 -ltcl8.6
WISH_EXE = /usr/bin/wish
TCL_LIB_DIR = /usr/lib
MAGIC_VERSION = 8.2
MAGIC_REVISION = 53
MAGIC_REVISION = 101
CC = gcc
CPP = gcc -E
CXX = g++
CPPFLAGS = -I. -I${MAGICDIR}
DFLAGS = -DCAD_DIR=\"${LIBDIR}\" -DBIN_DIR=\"${BINDIR}\" -DTCL_DIR=\"${TCLDIR}\" -DUSE_TCL_STUBS -DUSE_TK_STUBS -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DMAGIC_VERSION=\"8.2\" -DMAGIC_REVISION=\"53\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHAVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1 -DGCORE=\"/bin/gcore\"
DFLAGS = -DCAD_DIR=\"${LIBDIR}\" -DBIN_DIR=\"${BINDIR}\" -DTCL_DIR=\"${TCLDIR}\" -DUSE_TCL_STUBS -DUSE_TK_STUBS -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DMAGIC_VERSION=\"8.2\" -DMAGIC_REVISION=\"101\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHAVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1 -DGCORE=\"/bin/gcore\"
DFLAGS += -DSHDLIB_EXT=\".so\" -DNDEBUG
DFLAGS_NOSTUB = -DCAD_DIR=\"${LIBDIR}\" -DBIN_DIR=\"${BINDIR}\" -DTCL_DIR=\"${TCLDIR}\" -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DMAGIC_VERSION=\"8.2\" -DMAGIC_REVISION=\"53\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHAVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1 -DGCORE=\"/bin/gcore\"
DFLAGS_NOSTUB = -DCAD_DIR=\"${LIBDIR}\" -DBIN_DIR=\"${BINDIR}\" -DTCL_DIR=\"${TCLDIR}\" -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DMAGIC_VERSION=\"8.2\" -DMAGIC_REVISION=\"101\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHAVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1 -DGCORE=\"/bin/gcore\"
DFLAGS_NOSTUB += -DSHDLIB_EXT=\".so\" -DNDEBUG
CFLAGS = -g -m64 -fPIC -Wimplicit-int -fPIC

View File

@ -2159,9 +2159,9 @@ drcSpacing(argc, argv)
}
else
{
runlength = distance;
layers2 = argv[3];
distance = atoi(argv[4]);
runlength = distance;
adjacency = argv[5];
why = drcWhyDup(argv[6]);
}

View File

@ -1,36 +1,57 @@
DRCarray.o: DRCarray.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../drc/drc.h \
../windows/windows.h ../commands/commands.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../drc/drc.h ../windows/windows.h \
../commands/commands.h
DRCbasic.o: DRCbasic.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../drc/drc.h \
../utils/signals.h ../utils/maxrect.h ../utils/malloc.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../drc/drc.h ../utils/signals.h ../utils/maxrect.h \
../utils/malloc.h
DRCcif.o: DRCcif.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../windows/windows.h \
../dbwind/dbwind.h ../dbwind/dbwtech.h ../drc/drc.h ../cif/cif.h \
../cif/CIFint.h ../utils/signals.h ../utils/stack.h ../utils/malloc.h \
../utils/utils.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../dbwind/dbwind.h ../dbwind/dbwtech.h ../drc/drc.h \
../cif/cif.h ../cif/CIFint.h ../utils/signals.h ../utils/stack.h \
../utils/malloc.h
DRCcontin.o: DRCcontin.c ../tcltk/tclmagic.h ../utils/magic.h \
../textio/textio.h ../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../dbwind/dbwtech.h ../utils/main.h ../commands/commands.h ../drc/drc.h \
../utils/signals.h ../graphics/graphics.h ../utils/undo.h \
../utils/malloc.h
DRCmain.o: DRCmain.c ../utils/magic.h ../utils/malloc.h \
../textio/textio.h ../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../drc/drc.h ../utils/undo.h
DRCmain.o: DRCmain.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/malloc.h ../textio/textio.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../dbwind/dbwind.h ../drc/drc.h ../utils/undo.h
DRCsubcell.o: DRCsubcell.c ../utils/magic.h ../textio/textio.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../drc/drc.h ../windows/windows.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../drc/drc.h ../windows/windows.h \
../commands/commands.h ../utils/undo.h
DRCtech.o: DRCtech.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/utils.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../drc/drc.h ../utils/tech.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../drc/drc.h ../utils/tech.h ../textio/textio.h \
../utils/malloc.h ../cif/cif.h ../cif/CIFint.h
DRCprint.o: DRCprint.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../drc/drc.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../drc/drc.h
DRCextend.o: DRCextend.c ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../dbwind/dbwtech.h ../drc/drc.h ../utils/signals.h ../utils/stack.h \
../utils/maxrect.h

View File

@ -1,6 +1,8 @@
ext2sim.o: ext2sim.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/hash.h ../utils/utils.h ../tiles/tile.h \
../database/database.h ../windows/windows.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../textio/textio.h \
../dbwind/dbwind.h ../commands/commands.h ../textio/txcommands.h \
../extflat/extflat.h ../extract/extract.h ../utils/runstats.h \
../utils/malloc.h

View File

@ -1,6 +1,8 @@
ext2spice.o: ext2spice.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/malloc.h ../utils/geometry.h ../utils/hash.h ../utils/dqueue.h \
../utils/utils.h ../tiles/tile.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../textio/textio.h ../dbwind/dbwind.h \
../commands/commands.h ../textio/txcommands.h ../extflat/extflat.h \
../extflat/EFint.h ../extract/extract.h ../utils/runstats.h \
@ -8,6 +10,8 @@ ext2spice.o: ext2spice.c ../tcltk/tclmagic.h ../utils/magic.h \
ext2hier.o: ext2hier.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/malloc.h ../utils/geometry.h ../utils/hash.h ../utils/dqueue.h \
../utils/utils.h ../tiles/tile.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../textio/textio.h ../dbwind/dbwind.h \
../commands/commands.h ../textio/txcommands.h ../extflat/extflat.h \
../extflat/EFint.h ../extract/extract.h ../utils/runstats.h \

View File

@ -661,6 +661,7 @@ spcdevHierVisit(hc, dev, scale)
"base", esSpiceF);
fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]);
sdM = getCurDevMult();
spcHierWriteParams(hc, dev, scale, l, w, sdM);
break;
@ -788,6 +789,7 @@ spcdevHierVisit(hc, dev, scale)
subnode->efnode_name->efnn_hier,
"diode_bot", esSpiceF);
fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]);
sdM = getCurDevMult();
spcHierWriteParams(hc, dev, scale, l, w, sdM);
break;
@ -808,6 +810,7 @@ spcdevHierVisit(hc, dev, scale)
gate->dterm_node->efnode_name->efnn_hier,
"diode_top", esSpiceF);
fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]);
sdM = getCurDevMult();
spcHierWriteParams(hc, dev, scale, l, w, sdM);
break;
@ -1514,8 +1517,8 @@ devDistJunctHierVisit(hc, dev, scale)
return 0;
}
w = (int)((float)w * scale);
EFGetLengthAndWidth(dev, &l, &w);
w = (int)((float)w * scale);
for (i = 1; i<dev->dev_nterm; i++)
{
@ -1552,7 +1555,8 @@ esMakePorts(hc, cdata)
char *name, *portname, *tptr, *aptr, *locname;
int j;
if (def->def_uses == NULL) return 0; /* Bottom of hierarchy */
/* Done when the bottom of the hierarchy is reached */
if (HashGetNumEntries(&def->def_uses) == 0) return 0;
for (conn = (Connection *)def->def_conns; conn; conn = conn->conn_next)
{
@ -1579,13 +1583,11 @@ esMakePorts(hc, cdata)
// Find the cell for the instance
portdef = NULL;
for (use = updef->def_uses; use; use = use->use_next)
he = HashFind(&updef->def_uses, portname);
if (he != NULL)
{
if (!strcmp(use->use_id, portname))
{
portdef = use->use_def;
break;
}
use = (Use *)HashGetValue(he);
portdef = use->use_def;
}
if ((aptr == NULL) || (aptr > tptr))
*tptr = '/';
@ -1660,13 +1662,11 @@ esMakePorts(hc, cdata)
// Find the cell for the instance
portdef = NULL;
for (use = updef->def_uses; use; use = use->use_next)
he = HashFind(&updef->def_uses, portname);
if (he != NULL)
{
if (!strcmp(use->use_id, portname))
{
portdef = use->use_def;
break;
}
use = (Use *)HashGetValue(he);
portdef = use->use_def;
}
if ((aptr == NULL) || (aptr > tptr))
*tptr = '/';
@ -1747,7 +1747,7 @@ esHierVisit(hc, cdata)
if (def != topdef)
{
if (def->def_devs == NULL && def->def_uses == NULL)
if ((def->def_devs == NULL) && (HashGetNumEntries(&def->def_uses) == 0))
{
if (locDoSubckt == AUTO)
{

View File

@ -1685,6 +1685,7 @@ topVisit(def, doStub)
EFNodeName *unnumbered;
sname = (EFNodeName *) HashGetValue(he);
if (sname == NULL) continue; /* Should not happen */
snode = sname->efnn_node;
if (!(snode->efnode_flags & EF_PORT)) continue;
@ -2334,6 +2335,7 @@ spcdevVisit(dev, hierName, scale, trans)
name, esSpiceF);
fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]);
sdM = getCurDevMult();
spcWriteParams(dev, hierName, scale, l, w, sdM);
break;
@ -2455,6 +2457,7 @@ spcdevVisit(dev, hierName, scale, trans)
name, esSpiceF);
fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]);
sdM = getCurDevMult();
spcWriteParams(dev, hierName, scale, l, w, sdM);
break;
@ -2472,6 +2475,7 @@ spcdevVisit(dev, hierName, scale, trans)
name, esSpiceF);
fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]);
sdM = getCurDevMult();
spcWriteParams(dev, hierName, scale, l, w, sdM);
break;
@ -3795,8 +3799,8 @@ devDistJunctVisit(dev, hierName, scale, trans)
return 0;
}
w = (int)((float)w * scale);
EFGetLengthAndWidth(dev, &l, &w);
w = (int)((float)w * scale);
for (i = 1; i<dev->dev_nterm; i++)
{

View File

@ -1,3 +0,0 @@
extcheck.o: extcheck.c ../utils/magic.h ../utils/paths.h \
../utils/geometry.h ../utils/hash.h ../utils/utils.h \
../utils/pathvisit.h ../extflat/extflat.h ../utils/runstats.h

View File

@ -20,6 +20,8 @@ EFname.o: EFname.c ../tcltk/tclmagic.h ../utils/magic.h \
EFread.o: EFread.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../utils/hash.h ../utils/utils.h ../tiles/tile.h \
../commands/commands.h ../windows/windows.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../extflat/extflat.h ../extflat/EFint.h ../extract/extract.h \
../utils/paths.h
EFsym.o: EFsym.c ../utils/magic.h ../utils/geometry.h ../utils/geofast.h \

View File

@ -223,8 +223,8 @@ efAdjustSubCap(def, nodeName, nodeCapAdjust)
EFNode *node;
HashEntry *he;
he = HashFind(&def->def_nodes, nodeName);
if (nodename = (EFNodeName *) HashGetValue(he))
he = HashLookOnly(&def->def_nodes, nodeName);
if (he && (nodename = (EFNodeName *) HashGetValue(he)))
{
node = nodename->efnn_node;
node->efnode_cap += (EFCapValue) nodeCapAdjust;

View File

@ -174,7 +174,7 @@ efReadDef(def, dosubckt, resist, noscale, toplevel)
int argc, ac, n;
CellDef *dbdef;
EFCapValue cap;
char line[1024], *argv[64], *name, *attrs;
char line[1024], *argv[128], *name, *attrs;
int rscale = 1; /* Multiply resistances by this */
int cscale = 1; /* Multiply capacitances by this */
float lscale = 1.0; /* Multiply lambda by this */

View File

@ -1,97 +1,134 @@
ExtArray.o: ExtArray.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../utils/signals.h ../utils/styles.h \
../windows/windows.h ../dbwind/dbwind.h
ExtBasic.o: ExtBasic.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../utils/signals.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../utils/stack.h
ExtCell.o: ExtCell.c ../utils/magic.h ../utils/geometry.h \
../utils/styles.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../utils/malloc.h ../textio/textio.h ../debug/debug.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../utils/signals.h ../utils/stack.h ../utils/utils.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../utils/signals.h ../utils/stack.h \
../windows/windows.h ../utils/main.h ../utils/undo.h
ExtCouple.o: ExtCouple.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../extract/extract.h ../extract/extractInt.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h
ExtHard.o: ExtHard.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../utils/malloc.h \
../textio/textio.h ../utils/styles.h ../debug/debug.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../utils/geofast.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../utils/malloc.h ../textio/textio.h ../utils/styles.h ../debug/debug.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h
ExtHier.o: ExtHier.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../utils/styles.h ../windows/windows.h ../dbwind/dbwind.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h
ExtLength.o: ExtLength.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../utils/signals.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../utils/stack.h ../utils/main.h \
../utils/utils.h
../dbwind/dbwind.h ../utils/styles.h ../utils/stack.h ../utils/main.h
ExtMain.o: ExtMain.c ../utils/magic.h ../utils/geometry.h \
../utils/styles.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../utils/malloc.h ../textio/textio.h ../debug/debug.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../utils/signals.h ../utils/stack.h ../utils/utils.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../utils/signals.h ../utils/stack.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h ../utils/undo.h
ExtNghbors.o: ExtNghbors.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../debug/debug.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../debug/debug.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../utils/signals.h ../utils/stack.h
ExtPerim.o: ExtPerim.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/malloc.h \
../utils/stack.h ../debug/debug.h ../extract/extract.h \
../extract/extractInt.h ../extract/extDebugInt.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../utils/stack.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h
ExtRegion.o: ExtRegion.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/malloc.h \
../textio/textio.h ../debug/debug.h ../extract/extract.h \
../extract/extractInt.h ../extract/extDebugInt.h ../utils/signals.h
ExtSubtree.o: ExtSubtree.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../utils/signals.h
ExtSubtree.o: ExtSubtree.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../utils/signals.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h
ExtTech.o: ExtTech.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/utils.h ../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/databaseInt.h ../utils/malloc.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/malloc.h \
../textio/textio.h ../utils/tech.h ../debug/debug.h ../extract/extract.h \
../extract/extractInt.h ../extract/extDebugInt.h ../cif/CIFint.h
../extract/extractInt.h ../extract/extDebugInt.h ../cif/CIFint.h \
../cif/cif.h
ExtTest.o: ExtTest.c ../utils/magic.h ../utils/utils.h \
../utils/geometry.h ../utils/styles.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../windows/windows.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../windows/windows.h \
../graphics/graphics.h ../dbwind/dbwind.h ../utils/main.h \
../commands/commands.h ../textio/textio.h ../textio/txcommands.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h
ExtTimes.o: ExtTimes.c ../utils/magic.h ../utils/utils.h \
../utils/geometry.h ../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../bplane/bplaneInt.h \
../utils/malloc.h ../textio/textio.h ../extract/extract.h \
../extract/extractInt.h ../extract/extDebugInt.h
ExtYank.o: ExtYank.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../utils/styles.h ../extract/extract.h \
../extract/extractInt.h ../extract/extDebugInt.h
ExtInter.o: ExtInter.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../utils/undo.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../utils/signals.h ../utils/styles.h
ExtUnique.o: ExtUnique.c ../utils/magic.h ../utils/geometry.h \
../utils/styles.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../utils/malloc.h ../textio/textio.h ../debug/debug.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../utils/signals.h ../utils/stack.h ../utils/utils.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../utils/signals.h ../utils/stack.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h ../utils/undo.h

View File

@ -1,28 +1,37 @@
gaChannel.o: gaChannel.c ../utils/magic.h ../utils/geometry.h \
../utils/hash.h ../utils/heap.h ../tiles/tile.h ../database/database.h \
../windows/windows.h ../utils/main.h ../dbwind/dbwind.h \
../utils/signals.h ../netmenu/netmenu.h ../gcr/gcr.h ../router/router.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../garouter/garouter.h \
../garouter/gaDebug.h ../utils/netlist.h ../textio/textio.h \
../utils/styles.h ../debug/debug.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h \
../dbwind/dbwind.h ../utils/signals.h ../netmenu/netmenu.h ../gcr/gcr.h \
../router/router.h ../grouter/grouter.h ../grouter/grouteDebug.h \
../garouter/garouter.h ../garouter/gaDebug.h ../utils/netlist.h \
../textio/textio.h ../utils/styles.h ../debug/debug.h
gaMain.o: gaMain.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../utils/heap.h ../tiles/tile.h ../database/database.h \
../windows/windows.h ../utils/main.h ../dbwind/dbwind.h \
../utils/signals.h ../netmenu/netmenu.h ../gcr/gcr.h ../router/router.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../garouter/garouter.h \
../garouter/gaDebug.h ../utils/netlist.h ../textio/textio.h \
../debug/debug.h ../drc/drc.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h \
../dbwind/dbwind.h ../utils/signals.h ../netmenu/netmenu.h ../gcr/gcr.h \
../router/router.h ../grouter/grouter.h ../grouter/grouteDebug.h \
../garouter/garouter.h ../garouter/gaDebug.h ../utils/netlist.h \
../textio/textio.h ../debug/debug.h ../drc/drc.h
gaMaze.o: gaMaze.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../utils/heap.h ../utils/undo.h ../tiles/tile.h ../database/database.h \
../windows/windows.h ../utils/main.h ../dbwind/dbwind.h \
../utils/signals.h ../netmenu/netmenu.h ../gcr/gcr.h ../router/router.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../garouter/garouter.h \
../garouter/gaDebug.h gaInternal.h ../utils/netlist.h ../textio/textio.h \
../utils/styles.h ../utils/malloc.h ../drc/drc.h ../debug/debug.h \
../utils/list.h ../mzrouter/mzrouter.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h \
../dbwind/dbwind.h ../utils/signals.h ../netmenu/netmenu.h ../gcr/gcr.h \
../router/router.h ../grouter/grouter.h ../grouter/grouteDebug.h \
../garouter/garouter.h ../garouter/gaDebug.h gaInternal.h \
../utils/netlist.h ../textio/textio.h ../utils/styles.h \
../utils/malloc.h ../drc/drc.h ../debug/debug.h ../utils/list.h \
../mzrouter/mzrouter.h
gaSimple.o: gaSimple.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../utils/hash.h ../utils/heap.h ../tiles/tile.h \
../database/database.h ../windows/windows.h ../utils/main.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h \
../dbwind/dbwind.h ../utils/signals.h ../netmenu/netmenu.h ../gcr/gcr.h \
../router/router.h ../grouter/grouter.h ../grouter/grouteDebug.h \
../garouter/garouter.h ../garouter/gaDebug.h ../utils/netlist.h \
@ -31,16 +40,21 @@ gaSimple.o: gaSimple.c ../utils/magic.h ../utils/geometry.h \
../extract/extDebugInt.h
gaStem.o: gaStem.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../utils/heap.h ../tiles/tile.h ../database/database.h \
../windows/windows.h ../utils/main.h ../dbwind/dbwind.h \
../utils/signals.h ../netmenu/netmenu.h ../gcr/gcr.h ../router/router.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../garouter/garouter.h \
../garouter/gaDebug.h gaInternal.h ../utils/netlist.h ../textio/textio.h \
../utils/styles.h ../utils/malloc.h ../drc/drc.h ../debug/debug.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h \
../dbwind/dbwind.h ../utils/signals.h ../netmenu/netmenu.h ../gcr/gcr.h \
../router/router.h ../grouter/grouter.h ../grouter/grouteDebug.h \
../garouter/garouter.h ../garouter/gaDebug.h gaInternal.h \
../utils/netlist.h ../textio/textio.h ../utils/styles.h \
../utils/malloc.h ../drc/drc.h ../debug/debug.h
gaTest.o: gaTest.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../utils/heap.h ../tiles/tile.h ../database/database.h \
../utils/signals.h ../textio/textio.h ../debug/debug.h ../gcr/gcr.h \
../router/router.h ../grouter/grouter.h ../grouter/grouteDebug.h \
../graphics/graphics.h ../garouter/garouter.h ../garouter/gaDebug.h \
../windows/windows.h ../dbwind/dbwind.h ../textio/txcommands.h \
../utils/main.h ../utils/utils.h ../commands/commands.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../debug/debug.h ../gcr/gcr.h ../router/router.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../graphics/graphics.h ../garouter/garouter.h \
../garouter/gaDebug.h ../windows/windows.h ../dbwind/dbwind.h \
../textio/txcommands.h ../utils/main.h ../commands/commands.h \
../utils/styles.h

View File

@ -4,17 +4,24 @@ gcrColl.o: gcrColl.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../gcr/gcr.h ../utils/malloc.h
gcrDebug.o: gcrDebug.c ../utils/magic.h ../utils/geometry.h \
../textio/textio.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../gcr/gcr.h ../utils/heap.h ../router/router.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../gcr/gcr.h ../utils/heap.h ../router/router.h \
../utils/malloc.h
gcrEdge.o: gcrEdge.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../gcr/gcr.h
gcrFeas.o: gcrFeas.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../gcr/gcr.h ../utils/hash.h ../database/database.h ../router/router.h
../gcr/gcr.h ../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../router/router.h
gcrFlags.o: gcrFlags.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../gcr/gcr.h
gcrInit.o: gcrInit.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../utils/heap.h ../tiles/tile.h ../database/database.h \
../router/router.h ../gcr/gcr.h ../utils/malloc.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../router/router.h ../gcr/gcr.h ../utils/malloc.h
gcrLib.o: gcrLib.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../gcr/gcr.h ../utils/malloc.h
gcrRiver.o: gcrRiver.c ../utils/magic.h ../utils/geometry.h ../gcr/gcr.h \
@ -23,7 +30,10 @@ gcrRoute.o: gcrRoute.c ../utils/magic.h ../utils/geometry.h ../gcr/gcr.h \
../utils/signals.h ../utils/malloc.h ../utils/styles.h
gcrShwFlgs.o: gcrShwFlgs.c ../utils/magic.h ../utils/geometry.h \
../utils/hash.h ../tiles/tile.h ../database/database.h \
../windows/windows.h ../dbwind/dbwind.h ../gcr/gcr.h ../utils/heap.h \
../router/router.h ../utils/main.h ../utils/styles.h ../textio/textio.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../gcr/gcr.h ../utils/heap.h ../router/router.h ../utils/main.h \
../utils/styles.h ../textio/textio.h
gcrUnsplit.o: gcrUnsplit.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../gcr/gcr.h ../utils/malloc.h

View File

@ -7,18 +7,26 @@ grDStyle.o: grDStyle.c ../utils/magic.h ../utils/malloc.h \
../utils/styles.h ../utils/utils.h ../textio/textio.h \
../utils/geometry.h ../graphics/glyphs.h ../windows/windows.h \
../graphics/graphics.h ../graphics/graphicsInt.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../dbwind/dbwind.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/geofast.h ../bplane/bplaneInt.h ../dbwind/dbwind.h
grText.o: grText.c ../utils/magic.h ../textio/textio.h \
../utils/geometry.h ../database/database.h ../tiles/tile.h \
../utils/hash.h ../windows/windows.h ../graphics/graphics.h \
../graphics/graphicsInt.h ../utils/utils.h
../utils/hash.h ../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../graphics/graphicsInt.h
grCMap.o: grCMap.c ../utils/magic.h ../utils/malloc.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../graphics/graphics.h ../graphics/graphicsInt.h \
../utils/utils.h ../textio/textio.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../graphics/graphicsInt.h ../textio/textio.h
grClip.o: grClip.c ../utils/magic.h ../textio/textio.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h ../utils/styles.h \
../database/database.h ../windows/windows.h ../graphics/graphics.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../graphics/graphicsInt.h ../utils/malloc.h
grGlyphs.o: grGlyphs.c ../utils/magic.h ../utils/geometry.h \
../utils/utils.h ../windows/windows.h ../graphics/graphics.h \
@ -30,10 +38,12 @@ grNull.o: grNull.c ../utils/magsgtty.h ../utils/magic.h \
../utils/signals.h
W3Dmain.o: W3Dmain.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../windows/windows.h ../tiles/tile.h ../utils/hash.h \
../utils/undo.h ../database/database.h ../utils/main.h \
../commands/commands.h ../graphics/wind3d.h ../graphics/graphicsInt.h \
../graphics/graphics.h grTOGLInt.h ../textio/textio.h \
../textio/txcommands.h ../utils/utils.h ../utils/styles.h \
../utils/undo.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../utils/main.h ../commands/commands.h ../graphics/wind3d.h \
../graphics/graphicsInt.h ../graphics/graphics.h grTOGLInt.h \
../textio/textio.h ../textio/txcommands.h ../utils/styles.h \
../dbwind/dbwtech.h ../dbwind/dbwind.h ../extract/extract.h \
../graphics/glyphs.h ../utils/malloc.h ../windows/windInt.h ../cif/cif.h \
../cif/CIFint.h
@ -49,6 +59,8 @@ grX11su3.o: grX11su3.c ../utils/magic.h ../utils/geometry.h \
../graphics/graphics.h ../windows/windows.h ../graphics/graphicsInt.h \
../textio/textio.h ../utils/signals.h ../utils/utils.h ../utils/hash.h \
../dbwind/dbwind.h ../database/database.h ../tiles/tile.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/fonts.h grX11Int.h
grX11su4.o: grX11su4.c ../utils/magic.h ../utils/magsgtty.h \
../textio/textio.h ../utils/geometry.h ../graphics/graphics.h \
@ -60,10 +72,12 @@ grX11su5.o: grX11su5.c ../utils/magic.h ../utils/styles.h ../utils/hash.h \
grX11Int.h
grTk1.o: grTk1.c ../tcltk/tclmagic.h ../utils/main.h ../windows/windows.h \
../utils/magic.h ../utils/geometry.h ../database/database.h \
../tiles/tile.h ../utils/hash.h ../utils/malloc.h ../utils/magsgtty.h \
../tiles/tile.h ../utils/hash.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../utils/magsgtty.h \
../graphics/graphics.h ../graphics/graphicsInt.h ../textio/textio.h \
../textio/txcommands.h ../utils/signals.h ../utils/utils.h ../drc/drc.h \
../utils/macros.h grTkInt.h ../utils/paths.h ../graphics/grTkCommon.h
../textio/txcommands.h ../utils/signals.h ../drc/drc.h ../utils/macros.h \
grTkInt.h ../utils/paths.h ../graphics/grTkCommon.h
grTk2.o: grTk2.c ../tcltk/tclmagic.h ../utils/magic.h ../textio/textio.h \
../utils/geometry.h ../graphics/glyphs.h ../windows/windows.h \
../graphics/graphics.h ../graphics/graphicsInt.h grTkInt.h
@ -82,21 +96,25 @@ grTk5.o: grTk5.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/styles.h \
../graphics/graphicsInt.h grTkCommon.h grTkInt.h
grTOGL1.o: grTOGL1.c ../tcltk/tclmagic.h ../utils/main.h \
../windows/windows.h ../utils/magic.h ../utils/geometry.h \
../database/database.h ../tiles/tile.h ../utils/hash.h ../utils/malloc.h \
../utils/magsgtty.h ../graphics/graphics.h ../graphics/graphicsInt.h \
../textio/textio.h ../textio/txcommands.h ../utils/signals.h \
../utils/utils.h ../drc/drc.h ../utils/macros.h ../graphics/grTOGLInt.h \
../utils/paths.h ../graphics/grTkCommon.h
../database/database.h ../tiles/tile.h ../utils/hash.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../utils/magsgtty.h \
../graphics/graphics.h ../graphics/graphicsInt.h ../textio/textio.h \
../textio/txcommands.h ../utils/signals.h ../drc/drc.h ../utils/macros.h \
../graphics/grTOGLInt.h ../utils/paths.h ../graphics/grTkCommon.h
grTOGL2.o: grTOGL2.c ../tcltk/tclmagic.h ../utils/magic.h \
../textio/textio.h ../utils/geometry.h ../graphics/glyphs.h \
../windows/windows.h ../graphics/graphics.h ../graphics/graphicsInt.h \
grTOGLInt.h
grTOGL3.o: grTOGL3.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/malloc.h ../windows/windows.h \
../graphics/graphics.h ../graphics/graphicsInt.h ../textio/textio.h \
../utils/signals.h ../utils/utils.h ../utils/hash.h \
../graphics/grTOGLInt.h ../graphics/grTkCommon.h ../database/fonts.h \
../tiles/tile.h
../graphics/graphics.h ../graphics/graphicsInt.h ../dbwind/dbwind.h \
../database/database.h ../tiles/tile.h ../utils/hash.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../textio/textio.h ../utils/signals.h \
../graphics/grTOGLInt.h ../graphics/grTkCommon.h ../database/fonts.h
grTOGL4.o: grTOGL4.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/magsgtty.h ../textio/textio.h ../utils/geometry.h \
../windows/windows.h ../graphics/graphics.h ../graphics/graphicsInt.h \
@ -108,6 +126,8 @@ grTOGL5.o: grTOGL5.c ../tcltk/tclmagic.h ../utils/magic.h \
grTkCommon.o: grTkCommon.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/styles.h ../utils/geometry.h ../utils/hash.h ../utils/malloc.h \
../utils/utils.h ../tiles/tile.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../dbwind/dbwtech.h ../graphics/graphics.h \
../graphics/graphicsInt.h ../dbwind/dbwind.h ../graphics/grTkCommon.h \
../graphics/glyphs.h
@ -123,6 +143,8 @@ grOGL3.o: grOGL3.c ../utils/magic.h ../utils/geometry.h \
../graphics/graphics.h ../windows/windows.h ../graphics/graphicsInt.h \
../textio/textio.h ../utils/signals.h ../utils/utils.h ../utils/hash.h \
../dbwind/dbwind.h ../database/database.h ../tiles/tile.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/fonts.h grOGLInt.h
grOGL4.o: grOGL4.c ../utils/magic.h ../utils/magsgtty.h \
../textio/textio.h ../utils/geometry.h ../graphics/graphics.h \
@ -136,3 +158,32 @@ X11Helper.o: X11Helper.c
grX11thread.o: grX11thread.c ../utils/magic.h ../utils/geometry.h \
../graphics/graphics.h ../windows/windows.h ../graphics/graphicsInt.h \
grX11Int.h
grTCairo1.o: grTCairo1.c ../tcltk/tclmagic.h ../utils/main.h \
../windows/windows.h ../utils/magic.h ../utils/geometry.h \
../database/database.h ../tiles/tile.h ../utils/hash.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../utils/magsgtty.h \
../graphics/graphics.h ../graphics/graphicsInt.h ../textio/textio.h \
../textio/txcommands.h ../utils/signals.h ../drc/drc.h ../utils/macros.h \
../graphics/grTCairoInt.h ../utils/paths.h ../graphics/grTkCommon.h
grTCairo2.o: grTCairo2.c ../tcltk/tclmagic.h ../utils/magic.h \
../textio/textio.h ../utils/geometry.h ../graphics/glyphs.h \
../windows/windows.h ../graphics/graphics.h ../graphics/graphicsInt.h \
grTCairoInt.h ../textio/txcommands.h
grTCairo3.o: grTCairo3.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/malloc.h ../windows/windows.h \
../graphics/graphics.h ../graphics/graphicsInt.h ../dbwind/dbwind.h \
../database/database.h ../tiles/tile.h ../utils/hash.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../textio/textio.h ../utils/signals.h \
../graphics/grTCairoInt.h ../graphics/grTkCommon.h ../database/fonts.h
grTCairo4.o: grTCairo4.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/magsgtty.h ../textio/textio.h ../utils/geometry.h \
../windows/windows.h ../graphics/graphics.h ../graphics/graphicsInt.h \
../graphics/grTkCommon.h ../textio/txcommands.h grTCairoInt.h
grTCairo5.o: grTCairo5.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/styles.h ../utils/hash.h ../textio/textio.h ../utils/geometry.h \
../graphics/glyphs.h ../windows/windows.h ../graphics/graphics.h \
../graphics/graphicsInt.h grTkCommon.h grTCairoInt.h

View File

@ -1,58 +1,76 @@
grouteChan.o: grouteChan.c ../utils/magic.h ../utils/geometry.h \
../utils/styles.h ../utils/hash.h ../utils/heap.h ../utils/utils.h \
../tiles/tile.h ../database/database.h ../debug/debug.h ../gcr/gcr.h \
../tiles/tile.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/geofast.h ../bplane/bplaneInt.h ../debug/debug.h ../gcr/gcr.h \
../windows/windows.h ../utils/main.h ../dbwind/dbwind.h \
../utils/signals.h ../router/router.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../utils/netlist.h ../textio/textio.h \
../utils/malloc.h
grouteCrss.o: grouteCrss.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../utils/hash.h ../utils/heap.h ../utils/malloc.h \
../debug/debug.h ../tiles/tile.h ../database/database.h ../gcr/gcr.h \
../debug/debug.h ../tiles/tile.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../bplane/bplaneInt.h ../gcr/gcr.h \
../windows/windows.h ../utils/main.h ../dbwind/dbwind.h \
../utils/signals.h ../router/router.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../utils/netlist.h ../textio/textio.h \
../utils/styles.h
grouteDens.o: grouteDens.c ../utils/magic.h ../utils/geometry.h \
../utils/hash.h ../utils/heap.h ../tiles/tile.h ../database/database.h \
../utils/netlist.h ../gcr/gcr.h ../router/router.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../utils/signals.h ../textio/textio.h \
../utils/malloc.h ../utils/styles.h ../debug/debug.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/netlist.h ../gcr/gcr.h ../router/router.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../utils/signals.h \
../textio/textio.h ../utils/malloc.h ../utils/styles.h ../debug/debug.h
grouteMain.o: grouteMain.c ../utils/magic.h ../utils/geometry.h \
../utils/styles.h ../utils/hash.h ../utils/heap.h ../utils/utils.h \
../tiles/tile.h ../database/database.h ../debug/debug.h ../gcr/gcr.h \
../tiles/tile.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/geofast.h ../bplane/bplaneInt.h ../debug/debug.h ../gcr/gcr.h \
../windows/windows.h ../utils/main.h ../dbwind/dbwind.h \
../utils/signals.h ../router/router.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../utils/netlist.h ../textio/textio.h \
../utils/malloc.h
grouteMult.o: grouteMult.c ../utils/magic.h ../utils/geometry.h \
../utils/hash.h ../utils/heap.h ../tiles/tile.h ../database/database.h \
../router/router.h ../gcr/gcr.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../utils/netlist.h ../utils/signals.h \
../textio/textio.h ../utils/malloc.h ../utils/styles.h \
../windows/windows.h ../dbwind/dbwind.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../router/router.h ../gcr/gcr.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../utils/netlist.h \
../utils/signals.h ../textio/textio.h ../utils/malloc.h \
../utils/styles.h ../windows/windows.h ../dbwind/dbwind.h
grouteMaze.o: grouteMaze.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../utils/hash.h ../utils/heap.h ../utils/malloc.h \
../debug/debug.h ../tiles/tile.h ../database/database.h ../gcr/gcr.h \
../debug/debug.h ../tiles/tile.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../bplane/bplaneInt.h ../gcr/gcr.h \
../windows/windows.h ../utils/main.h ../dbwind/dbwind.h \
../utils/signals.h ../router/router.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../utils/netlist.h ../textio/textio.h \
../utils/styles.h
groutePath.o: groutePath.c ../utils/magic.h ../utils/geometry.h \
../utils/hash.h ../utils/heap.h ../tiles/tile.h ../debug/debug.h \
../database/database.h ../gcr/gcr.h ../windows/windows.h ../utils/main.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../gcr/gcr.h ../windows/windows.h ../utils/main.h \
../dbwind/dbwind.h ../utils/signals.h ../router/router.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../textio/textio.h \
../utils/malloc.h
groutePen.o: groutePen.c ../utils/magic.h ../utils/geometry.h \
../utils/hash.h ../utils/heap.h ../tiles/tile.h ../database/database.h \
../utils/netlist.h ../gcr/gcr.h ../router/router.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../utils/signals.h ../textio/textio.h \
../utils/malloc.h ../utils/styles.h ../utils/list.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/netlist.h ../gcr/gcr.h ../router/router.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../utils/signals.h \
../textio/textio.h ../utils/malloc.h ../utils/styles.h ../utils/list.h
grouteTest.o: grouteTest.c ../utils/magic.h ../utils/geometry.h \
../utils/hash.h ../utils/heap.h ../tiles/tile.h ../database/database.h \
../utils/signals.h ../textio/textio.h ../debug/debug.h ../gcr/gcr.h \
../router/router.h ../grouter/grouter.h ../grouter/grouteDebug.h \
../graphics/graphics.h ../windows/windows.h ../dbwind/dbwind.h \
../textio/txcommands.h ../utils/main.h ../utils/utils.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../debug/debug.h ../gcr/gcr.h ../router/router.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../graphics/graphics.h ../windows/windows.h \
../dbwind/dbwind.h ../textio/txcommands.h ../utils/main.h \
../commands/commands.h ../utils/malloc.h ../utils/styles.h \
../utils/netlist.h

View File

@ -1,34 +1,45 @@
irCommand.o: irCommand.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/hash.h ../tiles/tile.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../graphics/graphics.h ../windows/windows.h ../dbwind/dbwind.h \
../dbwind/dbwtech.h ../textio/txcommands.h ../utils/main.h \
../utils/utils.h ../commands/commands.h ../utils/styles.h \
../utils/malloc.h ../utils/list.h ../mzrouter/mzrouter.h \
../irouter/irouter.h ../irouter/irInternal.h ../irouter/irDebug.h
../commands/commands.h ../utils/styles.h ../utils/malloc.h \
../utils/list.h ../mzrouter/mzrouter.h ../irouter/irouter.h \
../irouter/irInternal.h ../irouter/irDebug.h
irMain.o: irMain.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../drc/drc.h ../select/select.h \
../utils/signals.h ../textio/textio.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../debug/debug.h ../utils/undo.h \
../textio/txcommands.h ../utils/malloc.h ../utils/list.h \
../mzrouter/mzrouter.h ../irouter/irouter.h ../irouter/irInternal.h \
../mzrouter/mzrouter.h ../irouter/irDebug.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h ../drc/drc.h \
../select/select.h ../utils/signals.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/styles.h \
../debug/debug.h ../utils/undo.h ../textio/txcommands.h \
../utils/malloc.h ../utils/list.h ../mzrouter/mzrouter.h \
../irouter/irouter.h ../irouter/irInternal.h ../mzrouter/mzrouter.h \
../irouter/irDebug.h
irRoute.o: irRoute.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../tiles/tile.h ../database/database.h ../drc/drc.h ../textio/textio.h \
../windows/windows.h ../utils/main.h ../dbwind/dbwind.h ../debug/debug.h \
../utils/undo.h ../utils/signals.h ../utils/malloc.h ../utils/list.h \
../utils/geofast.h ../utils/touchingtypes.h ../select/select.h \
../mzrouter/mzrouter.h ../irouter/irouter.h ../irouter/irInternal.h \
../mzrouter/mzrouter.h ../irouter/irDebug.h
../tiles/tile.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h ../drc/drc.h \
../textio/textio.h ../windows/windows.h ../utils/main.h \
../dbwind/dbwind.h ../debug/debug.h ../utils/undo.h ../utils/signals.h \
../utils/malloc.h ../utils/list.h ../utils/touchingtypes.h \
../select/select.h ../mzrouter/mzrouter.h ../irouter/irouter.h \
../irouter/irInternal.h ../mzrouter/mzrouter.h ../irouter/irDebug.h
irTestCmd.o: irTestCmd.c ../utils/magic.h ../utils/geometry.h \
../utils/hash.h ../tiles/tile.h ../database/database.h \
../utils/signals.h ../textio/textio.h ../irouter/irouter.h \
../graphics/graphics.h ../windows/windows.h ../dbwind/dbwind.h \
../dbwind/dbwtech.h ../textio/txcommands.h ../utils/main.h \
../utils/utils.h ../commands/commands.h ../utils/styles.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../irouter/irouter.h ../graphics/graphics.h ../windows/windows.h \
../dbwind/dbwind.h ../dbwind/dbwtech.h ../textio/txcommands.h \
../utils/main.h ../commands/commands.h ../utils/styles.h \
../utils/malloc.h ../utils/list.h ../mzrouter/mzrouter.h \
../irouter/irInternal.h ../mzrouter/mzrouter.h ../irouter/irDebug.h
irUtils.o: irUtils.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../utils/list.h \
../mzrouter/mzrouter.h ../irouter/irouter.h ../irouter/irInternal.h \
../irouter/irDebug.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../utils/list.h ../mzrouter/mzrouter.h ../irouter/irouter.h \
../irouter/irInternal.h ../irouter/irDebug.h

View File

@ -1,27 +1,40 @@
lefCmd.o: lefCmd.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../textio/txcommands.h ../commands/commands.h
lefTech.o: lefTech.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../lef/lefInt.h ../drc/drc.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../lef/lefInt.h ../drc/drc.h
lefWrite.o: lefWrite.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/tech.h ../utils/utils.h \
../utils/malloc.h ../utils/stack.h ../utils/signals.h \
../windows/windows.h ../dbwind/dbwind.h ../graphics/graphics.h \
../utils/main.h ../utils/undo.h ../cif/cif.h ../lef/lefInt.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/tech.h ../utils/malloc.h ../utils/stack.h \
../utils/signals.h ../windows/windows.h ../dbwind/dbwind.h \
../graphics/graphics.h ../utils/main.h ../utils/undo.h ../cif/cif.h \
../lef/lefInt.h
defWrite.o: defWrite.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/tech.h ../utils/malloc.h ../utils/undo.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/tech.h ../utils/malloc.h ../utils/undo.h \
../cif/cif.h ../extflat/extflat.h ../lef/lefInt.h ../drc/drc.h
lefRead.o: lefRead.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h ../utils/undo.h \
../database/database.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../utils/malloc.h ../textio/textio.h ../cif/cif.h \
../cif/CIFint.h ../lef/lefInt.h
../utils/utils.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/geofast.h ../bplane/bplaneInt.h ../windows/windows.h \
../graphics/graphics.h ../dbwind/dbwind.h ../utils/malloc.h \
../textio/textio.h ../cif/cif.h ../cif/CIFint.h ../cif/CIFread.h \
../lef/lefInt.h
defRead.o: defRead.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h ../utils/undo.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/malloc.h ../graphics/graphics.h ../utils/main.h ../cif/cif.h \
../lef/lefInt.h

View File

@ -53,6 +53,25 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
*------------------------------------------------------------
*/
enum def_netspecial_keys {DEF_SPECNET_SHAPE = 0, DEF_SPECNET_STYLE,
DEF_SPECNET_USE, DEF_SPECNET_VOLTAGE, DEF_SPECNET_FIXEDBUMP,
DEF_SPECNET_ORIGINAL, DEF_SPECNET_PATTERN, DEF_SPECNET_ESTCAP,
DEF_SPECNET_WEIGHT, DEF_SPECNET_PROPERTY};
enum def_netspecial_shape_keys {
DEF_SPECNET_SHAPE_RING = 0,
DEF_SPECNET_SHAPE_PADRING,
DEF_SPECNET_SHAPE_BLOCKRING,
DEF_SPECNET_SHAPE_STRIPE,
DEF_SPECNET_SHAPE_FOLLOWPIN,
DEF_SPECNET_SHAPE_IOWIRE,
DEF_SPECNET_SHAPE_COREWIRE,
DEF_SPECNET_SHAPE_BLOCKWIRE,
DEF_SPECNET_SHAPE_BLOCKAGEWIRE,
DEF_SPECNET_SHAPE_FILLWIRE,
DEF_SPECNET_SHAPE_FILLWIREOPC,
DEF_SPECNET_SHAPE_DRCFILL};
char *
DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
CellDef *rootDef; /* Cell to paint */
@ -67,11 +86,43 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
bool valid = FALSE; /* is there a valid reference point? */
bool initial = TRUE;
Rect locarea;
int extend, lextend, hextend;
float x, y, z, w;
int routeWidth, paintWidth, saveWidth;
TileType routeLayer, paintLayer;
HashEntry *he;
lefLayer *lefl;
int keyword;
static char *specnet_keys[] = {
"SHAPE",
"STYLE",
"USE",
"VOLTAGE",
"FIXEDBUMP",
"ORIGINAL",
"PATTERN",
"ESTCAP",
"WEIGHT",
"PROPERTY",
NULL
};
static char *specnet_shape_keys[] = {
"RING",
"PADRING",
"BLOCKRING",
"STRIPE",
"FOLLOWPIN",
"IOWIRE",
"COREWIRE",
"BLOCKWIRE",
"BLOCKAGEWIRE",
"FILLWIRE",
"FILLWIREOPC",
"DRCFILL",
NULL
};
while (initial || (token = LefNextToken(f, TRUE)) != NULL)
{
@ -105,7 +156,7 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
if (routeLayer < 0)
{
LefError("Unknown layer type \"%s\" for NEW route\n", token);
LefError(DEF_ERROR, "Unknown layer type \"%s\" for NEW route\n", token);
continue;
}
paintLayer = routeLayer;
@ -116,7 +167,7 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
token = LefNextToken(f, TRUE);
if (sscanf(token, "%f", &w) != 1)
{
LefError("Bad width in special net\n");
LefError(DEF_ERROR, "Bad width in special net\n");
continue;
}
if (w != 0)
@ -130,6 +181,141 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
paintWidth = (lefl) ? lefl->info.route.width :
DEFAULT_WIDTH * DBLambda[1] / DBLambda[0];
}
else if ((*token == '+') && (special == TRUE))
{
int netstyle;
/* Check for SHAPE, STYLE, or USE keywords */
token = LefNextToken(f, TRUE);
keyword = Lookup(token, specnet_keys);
if (keyword < 0)
{
LefError(DEF_INFO, "Unknown keyword \"%s\" in SPECIALNET "
"definition; ignoring.\n", token);
LefEndStatement(f);
continue;
}
switch(keyword)
{
case DEF_SPECNET_STYLE:
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &netstyle) != 1)
{
LefError(DEF_INFO, "Net style \"%s\" in SPECIALNET "
"definition is not a number; ignoring.\n", token);
LefEndStatement(f);
continue;
}
break;
case DEF_SPECNET_SHAPE:
token = LefNextToken(f, TRUE);
keyword = Lookup(token, specnet_shape_keys);
if (keyword < 0)
{
LefError(DEF_INFO, "Unknown SHAPE \"%s\" in SPECIALNET "
"definition; ignoring.\n", token);
LefEndStatement(f);
continue;
}
break;
case DEF_SPECNET_PROPERTY:
/* Ignore except to absorb the next two tokens. */
token = LefNextToken(f, TRUE); /* Drop through */
case DEF_SPECNET_USE:
case DEF_SPECNET_VOLTAGE:
case DEF_SPECNET_ORIGINAL:
case DEF_SPECNET_PATTERN:
case DEF_SPECNET_ESTCAP:
case DEF_SPECNET_WEIGHT:
/* Ignore except to absorb the next token. */
token = LefNextToken(f, TRUE); /* Drop through */
case DEF_SPECNET_FIXEDBUMP:
/* Ignore this keyword */
break;
}
}
else if (!strcmp(token, "RECT"))
{
/* NOTE: Use of "RECT" in NETS is not in the LEF/DEF spec. */
/* However, its use has been seen. So "special" is not */
/* checked here. */
/* The rectangle coordinates are relative to the current */
/* reference point, not absolute. */
newRoute = (LinkedRect *)mallocMagic(sizeof(LinkedRect));
/* Read an (llx lly urx ury) rectangle */
token = LefNextToken(f, TRUE); /* read llx */
if (*token == '(') token = LefNextToken(f, TRUE);
if (sscanf(token, "%f", &x) == 1)
{
locarea.r_xbot = (refp.p_x / 2) + (int)roundf(x / oscale);
}
else
{
LefError(DEF_ERROR, "Cannot parse X coordinate in RECT.\n");
goto endCoord;
}
token = LefNextToken(f, TRUE); /* read lly */
if (sscanf(token, "%f", &y) == 1)
{
locarea.r_ybot = (refp.p_y / 2) + (int)roundf(y / oscale);
}
else
{
LefError(DEF_ERROR, "Cannot parse Y coordinate in RECT.\n");
goto endCoord;
}
token = LefNextToken(f, TRUE); /* read urx */
if (sscanf(token, "%f", &x) == 1)
{
locarea.r_xtop = (refp.p_x / 2) + (int)roundf(x / oscale);
}
else
{
LefError(DEF_ERROR, "Cannot parse X coordinate in RECT.\n");
goto endCoord;
}
token = LefNextToken(f, TRUE); /* read ury */
if (sscanf(token, "%f", &y) == 1)
{
locarea.r_ytop = (refp.p_y / 2) + (int)roundf(y / oscale);
}
else
{
LefError(DEF_ERROR, "Cannot parse Y coordinate in RECT.\n");
goto endCoord;
}
token = LefNextToken(f, TRUE); /* read closing parens */
if (*token != ')')
{
LefError(DEF_ERROR, "Bad coordinates in RECT.\n");
goto endCoord;
}
GeoCanonicalRect(&locarea, &newRoute->r_r);
}
else if (!strcmp(token, "POLYGON"))
{
LefError(DEF_ERROR, "Route has POLYGON entries, this is not handled!\n",
token);
token = LefNextToken(f, TRUE); /* read opening parens */
goto endCoord;
}
else if (!strcmp(token, "VIRTUAL"))
{
/* Is this a LEF 5.8 thing? Not sure if it should be ignored! */
/* Should the whole wire leg be ignored? */
continue;
}
else if (*token != '(') /* via name */
{
/* A '+' or ';' record ends the route */
@ -138,7 +324,7 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
else if (valid == FALSE)
{
LefError("Route has via name \"%s\" but no points!\n", token);
LefError(DEF_ERROR, "Route has via name \"%s\" but no points!\n", token);
continue;
}
he = HashLookOnly(&LefInfo, token);
@ -197,7 +383,8 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
}
else if ((paintLayer = DBTechNameType(LefLower(token))) >= 0)
{
LefError("Error: Via \"%s\" named but undefined.\n", token);
LefError(DEF_ERROR, "Error: Via \"%s\" named but undefined.\n",
token);
newRoute->r_r.r_xbot = refp.p_x - paintWidth;
newRoute->r_r.r_ybot = refp.p_y - paintWidth;
newRoute->r_r.r_xtop = refp.p_x + paintWidth;
@ -209,7 +396,7 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
newRoute->r_r.r_ytop >>= 1;
}
else
LefError("Via name \"%s\" unknown in route.\n", token);
LefError(DEF_ERROR, "Via name \"%s\" unknown in route.\n", token);
/* After the via, the new route layer becomes whatever */
/* residue of the via was NOT the previous route layer. */
@ -244,7 +431,7 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
}
}
else
LefError("Via name \"%s\" unknown in route.\n", token);
LefError(DEF_ERROR, "Via name \"%s\" unknown in route.\n", token);
}
else
{
@ -254,14 +441,15 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
/* Record current reference point */
locarea.r_xbot = refp.p_x;
locarea.r_ybot = refp.p_y;
lextend = extend;
/* Read an (X Y) point */
/* Read an (X Y [extend]) point */
token = LefNextToken(f, TRUE); /* read X */
if (*token == '*')
{
if (valid == FALSE)
{
LefError("No reference point for \"*\" wildcard\n");
LefError(DEF_ERROR, "No reference point for \"*\" wildcard\n");
goto endCoord;
}
}
@ -271,7 +459,7 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
}
else
{
LefError("Cannot parse X coordinate.\n");
LefError(DEF_ERROR, "Cannot parse X coordinate.\n");
goto endCoord;
}
token = LefNextToken(f, TRUE); /* read Y */
@ -279,7 +467,7 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
{
if (valid == FALSE)
{
LefError("No reference point for \"*\" wildcard\n");
LefError(DEF_ERROR, "No reference point for \"*\" wildcard\n");
freeMagic(newRoute);
newRoute = NULL;
goto endCoord;
@ -291,7 +479,7 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
}
else
{
LefError("Cannot parse Y coordinate.\n");
LefError(DEF_ERROR, "Cannot parse Y coordinate.\n");
goto endCoord;
}
@ -300,19 +488,19 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
/* is apparently how everyone interprets it, and is true for */
/* 5.6 spec. */
z = (special) ? 0 : paintWidth;
extend = (special) ? 0 : paintWidth;
token = LefNextToken(f, TRUE);
if (*token != ')')
{
/* non-default route extension */
if (sscanf(token, "%f", &z) != 1)
LefError("Can't parse route extension value.\n");
LefError(DEF_ERROR, "Can't parse route extension value.\n");
/* all values will be divided by 2, so we need */
/* to multiply up by 2 now. */
else
z *= 2;
extend = (int)roundf((2 * z) / oscale);
}
/* Indicate that we have a valid reference point */
@ -326,9 +514,10 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
/* Skip over nonmanhattan segments, reset the reference */
/* point, and output a warning. */
LefError("Can't deal with nonmanhattan geometry in route.\n");
LefError(DEF_ERROR, "Can't deal with nonmanhattan geometry in route.\n");
locarea.r_xbot = refp.p_x;
locarea.r_ybot = refp.p_y;
lextend = extend;
}
else
{
@ -341,6 +530,19 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
locarea.r_xtop = refp.p_x;
locarea.r_ytop = refp.p_y;
/* Change route segment to a canonical rectangle. If */
/* the route is flipped relative to canonical coords, */
/* then the wire extentions have to be swapped as well. */
if ((locarea.r_xtop < locarea.r_xbot) ||
(locarea.r_ytop < locarea.r_ybot))
{
hextend = lextend;
lextend = extend;
}
else
hextend = extend;
GeoCanonicalRect(&locarea, &newRoute->r_r);
if (newRoute->r_r.r_xbot == newRoute->r_r.r_xtop)
@ -350,8 +552,8 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
}
else
{
newRoute->r_r.r_xbot -= z;
newRoute->r_r.r_xtop += z;
newRoute->r_r.r_xbot -= lextend;
newRoute->r_r.r_xtop += hextend;
}
if (newRoute->r_r.r_ybot == newRoute->r_r.r_ytop)
@ -361,8 +563,8 @@ DefAddRoutes(rootDef, f, oscale, special, defLayerMap)
}
else
{
newRoute->r_r.r_ybot -= z;
newRoute->r_r.r_ytop += z;
newRoute->r_r.r_ybot -= lextend;
newRoute->r_r.r_ytop += hextend;
}
/* If we don't have integer units here, we should */
@ -471,7 +673,7 @@ DefReadNets(f, rootDef, sname, oscale, special, total)
keyword = Lookup(token, net_keys);
if (keyword < 0)
{
LefError("Unknown keyword \"%s\" in NET "
LefError(DEF_INFO, "Unknown keyword \"%s\" in NET "
"definition; ignoring.\n", token);
LefEndStatement(f);
continue;
@ -508,14 +710,16 @@ DefReadNets(f, rootDef, sname, oscale, special, total)
subkey = Lookup(token, net_property_keys);
if (subkey < 0)
{
LefError("Unknown net property \"%s\" in "
LefError(DEF_INFO, "Unknown net property \"%s\" in "
"NET definition; ignoring.\n", token);
continue;
}
switch (subkey)
{
case DEF_NETPROP_USE:
/* Presently, we ignore this */
/* Presently, we ignore this, except to */
/* absorb the following value. */
token = LefNextToken(f, TRUE);
break;
case DEF_NETPROP_ROUTED:
case DEF_NETPROP_FIXED:
@ -530,7 +734,7 @@ DefReadNets(f, rootDef, sname, oscale, special, total)
case DEF_NET_END:
if (!LefParseEndStatement(f, sname))
{
LefError("Net END statement missing.\n");
LefError(DEF_ERROR, "Net END statement missing.\n");
keyword = -1;
}
break;
@ -542,7 +746,7 @@ DefReadNets(f, rootDef, sname, oscale, special, total)
TxPrintf(" Processed %d%s nets total.\n", processed,
(special) ? " special" : "");
else
LefError("Warning: Number of nets read (%d) does not match "
LefError(DEF_WARNING, "Number of nets read (%d) does not match "
"the number declared (%d).\n", processed, total);
freeMagic((char *)defLayerMap);
@ -600,7 +804,7 @@ DefReadLocation(use, f, oscale, tptr)
keyword = Lookup(token, orientations);
if (keyword < 0)
{
LefError("Unknown macro orientation \"%s\".\n", token);
LefError(DEF_ERROR, "Unknown macro orientation \"%s\".\n", token);
return -1;
}
@ -668,7 +872,7 @@ DefReadLocation(use, f, oscale, tptr)
return 0;
parse_error:
LefError("Cannot parse location: must be ( X Y ) orient\n");
LefError(DEF_ERROR, "Cannot parse location: must be ( X Y ) orient\n");
return -1;
}
@ -692,7 +896,8 @@ enum def_pins_keys {DEF_PINS_START = 0, DEF_PINS_END};
enum def_pins_prop_keys {
DEF_PINS_PROP_NET = 0, DEF_PINS_PROP_DIR,
DEF_PINS_PROP_LAYER, DEF_PINS_PROP_USE,
DEF_PINS_PROP_PLACED, DEF_PINS_PROP_FIXED};
DEF_PINS_PROP_PLACED, DEF_PINS_PROP_FIXED,
DEF_PINS_PROP_PORT, DEF_PINS_PROP_SPECIAL};
void
DefReadPins(f, rootDef, sname, oscale, total)
@ -713,6 +918,7 @@ DefReadPins(f, rootDef, sname, oscale, total)
Transform t;
lefLayer *lefl;
bool pending = FALSE;
bool hasports = FALSE;
static char *pin_keys[] = {
"-",
@ -727,6 +933,8 @@ DefReadPins(f, rootDef, sname, oscale, total)
"USE",
"PLACED",
"FIXED",
"PORT",
"SPECIAL",
NULL
};
@ -755,7 +963,7 @@ DefReadPins(f, rootDef, sname, oscale, total)
if (keyword < 0)
{
LefError("Unknown keyword \"%s\" in PINS "
LefError(DEF_INFO, "Unknown keyword \"%s\" in PINS "
"definition; ignoring.\n", token);
LefEndStatement(f);
continue;
@ -763,13 +971,14 @@ DefReadPins(f, rootDef, sname, oscale, total)
switch (keyword)
{
case DEF_PINS_START: /* "-" keyword */
hasports = FALSE;
// Flag an error if a pin was waiting on a layer
// specification that was never given.
if (pending)
{
LefError("Pin specified without layer, was not placed.\n");
LefError(DEF_ERROR, "Pin specified without layer, was not placed.\n");
}
/* Update the record of the number of pins */
@ -781,7 +990,7 @@ DefReadPins(f, rootDef, sname, oscale, total)
token = LefNextToken(f, TRUE);
if (sscanf(token, "%2047s", pinname) != 1)
{
LefError("Bad pin statement: Need pin name\n");
LefError(DEF_ERROR, "Bad pin statement: Need pin name\n");
LefEndStatement(f);
break;
}
@ -799,12 +1008,24 @@ DefReadPins(f, rootDef, sname, oscale, total)
subkey = Lookup(token, pin_property_keys);
if (subkey < 0)
{
LefError("Unknown pin property \"%s\" in "
LefError(DEF_INFO, "Unknown pin property \"%s\" in "
"PINS definition; ignoring.\n", token);
continue;
}
switch (subkey)
{
case DEF_PINS_PROP_SPECIAL:
/* Ignore this */
break;
case DEF_PINS_PROP_PORT:
/* Ignore this, except that each port adds to */
/* the count of total pins processed. Note */
/* that since "processed" is incremented before */
/* the first PORT is seen, then "processed" */
/* should not be incremented until the 2nd PORT */
if (hasports) processed++;
hasports = TRUE;
break;
case DEF_PINS_PROP_USE:
case DEF_PINS_PROP_NET:
/* Get the net name, but ignore it */
@ -814,7 +1035,7 @@ DefReadPins(f, rootDef, sname, oscale, total)
token = LefNextToken(f, TRUE);
subkey = Lookup(token, pin_classes);
if (subkey < 0)
LefError("Unknown pin class\n");
LefError(DEF_ERROR, "Unknown pin class\n");
else
pinDir = lef_class_to_bitmask[subkey];
break;
@ -869,7 +1090,7 @@ DefReadPins(f, rootDef, sname, oscale, total)
case DEF_PINS_END:
if (!LefParseEndStatement(f, sname))
{
LefError("Pins END statement missing.\n");
LefError(DEF_ERROR, "Pins END statement missing.\n");
keyword = -1;
}
break;
@ -880,7 +1101,7 @@ DefReadPins(f, rootDef, sname, oscale, total)
if (processed == total)
TxPrintf(" Processed %d pins total.\n", processed);
else
LefError("Warning: Number of pins read (%d) does not match "
LefError(DEF_WARNING, "Number of pins read (%d) does not match "
"the number declared (%d).\n", processed, total);
}
@ -904,7 +1125,10 @@ DefReadPins(f, rootDef, sname, oscale, total)
enum def_vias_keys {DEF_VIAS_START = 0, DEF_VIAS_END};
enum def_vias_prop_keys {
DEF_VIAS_PROP_RECT = 0};
DEF_VIAS_PROP_RECT = 0, DEF_VIAS_PROP_VIARULE,
DEF_VIAS_PROP_CUTSIZE, DEF_VIAS_PROP_LAYERS,
DEF_VIAS_PROP_CUTSPACING, DEF_VIAS_PROP_ENCLOSURE,
DEF_VIAS_PROP_ROWCOL};
void
DefReadVias(f, sname, oscale, total)
@ -922,6 +1146,13 @@ DefReadVias(f, sname, oscale, total)
lefLayer *lefl;
HashEntry *he;
/* For generated vias */
bool generated = FALSE;
int sizex, sizey, spacex, spacey;
int encbx, encby, enctx, encty;
int rows = 1, cols = 1;
TileType tlayer, clayer, blayer;
static char *via_keys[] = {
"-",
"END",
@ -930,6 +1161,12 @@ DefReadVias(f, sname, oscale, total)
static char *via_property_keys[] = {
"RECT",
"VIARULE",
"CUTSIZE",
"LAYERS",
"CUTSPACING",
"ENCLOSURE",
"ROWCOL",
NULL
};
@ -939,7 +1176,7 @@ DefReadVias(f, sname, oscale, total)
if (keyword < 0)
{
LefError("Unknown keyword \"%s\" in VIAS "
LefError(DEF_INFO, "Unknown keyword \"%s\" in VIAS "
"definition; ignoring.\n", token);
LefEndStatement(f);
continue;
@ -957,7 +1194,7 @@ DefReadVias(f, sname, oscale, total)
token = LefNextToken(f, TRUE);
if (sscanf(token, "%2047s", vianame) != 1)
{
LefError("Bad via statement: Need via name\n");
LefError(DEF_ERROR, "Bad via statement: Need via name\n");
LefEndStatement(f);
break;
}
@ -977,7 +1214,7 @@ DefReadVias(f, sname, oscale, total)
}
else
{
LefError("Warning: Composite via \"%s\" redefined.\n", vianame);
LefError(DEF_WARNING, "Composite via \"%s\" redefined.\n", vianame);
lefl = LefRedefined(lefl, vianame);
}
@ -986,14 +1223,24 @@ DefReadVias(f, sname, oscale, total)
while ((token = LefNextToken(f, TRUE)) != NULL)
{
if (*token == ';') break;
if (*token == ';') {
if (generated == TRUE) {
/* Complete the generated via */
LefGenViaGeometry(f, lefl,
sizex, sizey, spacex, spacey,
encbx, encby, enctx, encty,
rows, cols, tlayer, clayer, blayer,
oscale);
}
break;
}
if (*token != '+') continue;
token = LefNextToken(f, TRUE);
subkey = Lookup(token, via_property_keys);
if (subkey < 0)
{
LefError("Unknown via property \"%s\" in "
LefError(DEF_INFO, "Unknown via property \"%s\" in "
"VIAS definition; ignoring.\n", token);
continue;
}
@ -1003,6 +1250,90 @@ DefReadVias(f, sname, oscale, total)
curlayer = LefReadLayer(f, FALSE);
LefAddViaGeometry(f, lefl, curlayer, oscale);
break;
case DEF_VIAS_PROP_VIARULE:
token = LefNextToken(f, TRUE);
/* Ignore this. To do: Parse VIARULE statements */
/* and use the rule to fill any missing values. */
break;
case DEF_VIAS_PROP_CUTSIZE:
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &sizex) != 1)
{
LefError(DEF_ERROR, "Invalid syntax for CUTSIZE.\n");
/* To do: Get cut size from DRC ruleset */
}
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &sizey) != 1)
{
LefError(DEF_ERROR, "Invalid syntax for CUTSIZE.\n");
/* To do: Get cut size from DRC ruleset */
}
generated = TRUE;
break;
case DEF_VIAS_PROP_LAYERS:
blayer = LefReadLayer(f, FALSE);
clayer = LefReadLayer(f, FALSE);
tlayer = LefReadLayer(f, FALSE);
generated = TRUE;
break;
case DEF_VIAS_PROP_CUTSPACING:
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &spacex) != 1)
{
LefError(DEF_ERROR, "Invalid syntax for CUTSPACING.\n");
/* To do: Get cut spacing from DRC ruleset */
}
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &spacey) != 1)
{
LefError(DEF_ERROR, "Invalid syntax for CUTSPACING.\n");
/* To do: Get cut spacing from DRC ruleset */
}
generated = TRUE;
break;
case DEF_VIAS_PROP_ENCLOSURE:
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &enctx) != 1)
{
LefError(DEF_ERROR, "Invalid syntax for ENCLOSURE.\n");
/* To do: Get cut enclosures from DRC ruleset */
}
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &encty) != 1)
{
LefError(DEF_ERROR, "Invalid syntax for ENCLOSURE.\n");
/* To do: Get cut enclosures from DRC ruleset */
}
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &encbx) != 1)
{
LefError(DEF_ERROR, "Invalid syntax for ENCLOSURE.\n");
/* To do: Get cut enclosures from DRC ruleset */
}
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &encby) != 1)
{
LefError(DEF_ERROR, "Invalid syntax for ENCLOSURE.\n");
/* To do: Get cut enclosures from DRC ruleset */
}
generated = TRUE;
break;
case DEF_VIAS_PROP_ROWCOL:
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &rows) != 1)
{
LefError(DEF_ERROR, "Invalid syntax for ROWCOL.\n");
rows = 1;
}
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &cols) != 1)
{
LefError(DEF_ERROR, "Invalid syntax for ROWCOL.\n");
cols = 1;
}
generated = TRUE;
break;
}
}
break;
@ -1010,7 +1341,7 @@ DefReadVias(f, sname, oscale, total)
case DEF_VIAS_END:
if (!LefParseEndStatement(f, sname))
{
LefError("Vias END statement missing.\n");
LefError(DEF_ERROR, "Vias END statement missing.\n");
keyword = -1;
}
break;
@ -1021,7 +1352,7 @@ DefReadVias(f, sname, oscale, total)
if (processed == total)
TxPrintf(" Processed %d vias total.\n", processed);
else
LefError("Warning: Number of vias read (%d) does not match "
LefError(DEF_WARNING, "Number of vias read (%d) does not match "
"the number declared (%d).\n", processed, total);
}
@ -1061,7 +1392,7 @@ DefReadComponents(f, rootDef, sname, oscale, total)
CellDef *defMacro;
CellUse *defUse;
Transform t;
char *token;
char *token, *dptr;
char usename[512];
int keyword, subkey, values;
int processed = 0;
@ -1093,7 +1424,7 @@ DefReadComponents(f, rootDef, sname, oscale, total)
if (keyword < 0)
{
LefError("Unknown keyword \"%s\" in COMPONENT "
LefError(DEF_INFO, "Unknown keyword \"%s\" in COMPONENT "
"definition; ignoring.\n", token);
LefEndStatement(f);
continue;
@ -1111,10 +1442,27 @@ DefReadComponents(f, rootDef, sname, oscale, total)
token = LefNextToken(f, TRUE);
if (sscanf(token, "%511s", usename) != 1)
{
LefError("Bad component statement: Need use and macro names\n");
LefError(DEF_ERROR, "Bad component statement: Need "
"use and macro names\n");
LefEndStatement(f);
break;
}
/* Does use name contain brackets? If so, this can */
/* interfere with magic's use of arrays. */
/* NOTE: It is not clear that this needs to be */
/* done during DEF read. The only confusion comes */
/* from the arrays being parsed by ExtFlat when */
/* doing ext2spice. */
dptr = strchr(usename, '[');
if (dptr != NULL) {
*dptr = '_';
dptr = strchr(dptr + 1, ']');
if (dptr != NULL) *dptr = '_';
}
token = LefNextToken(f, TRUE);
/* Find the corresponding macro definition */
@ -1129,8 +1477,8 @@ DefReadComponents(f, rootDef, sname, oscale, total)
defMacro->cd_flags &= ~CDNOTFOUND;
if (!DBCellRead(defMacro, (char *)NULL, TRUE, NULL))
{
LefError("Cell %s is not defined. Maybe you have not "
"read the corresponding LEF file?\n",
LefError(DEF_ERROR, "Cell %s is not defined. Maybe you "
"have not read the corresponding LEF file?\n",
token);
LefEndStatement(f);
DBCellDeleteDef(defMacro);
@ -1163,7 +1511,7 @@ DefReadComponents(f, rootDef, sname, oscale, total)
subkey = Lookup(token, property_keys);
if (subkey < 0)
{
LefError("Unknown component property \"%s\" in "
LefError(DEF_INFO, "Unknown component property \"%s\" in "
"COMPONENT definition; ignoring.\n", token);
continue;
}
@ -1198,7 +1546,7 @@ DefReadComponents(f, rootDef, sname, oscale, total)
case DEF_COMP_END:
if (!LefParseEndStatement(f, sname))
{
LefError("Component END statement missing.\n");
LefError(DEF_ERROR, "Component END statement missing.\n");
keyword = -1;
}
@ -1216,7 +1564,7 @@ DefReadComponents(f, rootDef, sname, oscale, total)
if (processed == total)
TxPrintf(" Processed %d subcell instances total.\n", processed);
else
LefError("Warning: Number of subcells read (%d) does not match "
LefError(DEF_WARNING, "Number of subcells read (%d) does not match "
"the number declared (%d).\n", processed, total);
}
@ -1330,7 +1678,7 @@ DefRead(inName)
keyword = Lookup(token, sections);
if (keyword < 0)
{
LefError("Unknown keyword \"%s\" in DEF file; ignoring.\n", token);
LefError(DEF_INFO, "Unknown keyword \"%s\" in DEF file; ignoring.\n", token);
LefEndStatement(f);
continue;
}
@ -1346,7 +1694,7 @@ DefRead(inName)
token = LefNextToken(f, TRUE);
if (strcmp(token, DBTechName))
{
LefError("Warning: DEF technology name \"%s\" does not"
LefError(DEF_WARNING, "DEF technology name \"%s\" does not"
" match current magic technology name \"%s\"\n",
token, DBTechName);
}
@ -1366,8 +1714,8 @@ DefRead(inName)
token = LefNextToken(f, TRUE);
if (sscanf(token, "%d", &dscale) != 1)
{
LefError("Invalid syntax for UNITS statement.\n");
LefError("Assuming default value of 100\n");
LefError(DEF_ERROR, "Invalid syntax for UNITS statement.\n");
LefError(DEF_INFO, "Assuming default value of 100\n");
dscale = 100;
}
/* We don't care if the scale is 100, 200, 1000, or 2000. */
@ -1453,7 +1801,7 @@ DefRead(inName)
case DEF_END:
if (!LefParseEndStatement(token, "DESIGN"))
{
LefError("END statement out of context.\n");
LefError(DEF_ERROR, "END statement out of context.\n");
keyword = -1;
}
break;
@ -1461,7 +1809,7 @@ DefRead(inName)
if (keyword == DEF_END) break;
}
TxPrintf("DEF read: Processed %d lines.\n", lefCurrentLine);
LefError(NULL); /* print statement of errors, if any, and reset */
LefError(DEF_SUMMARY, NULL); /* print statement of errors, if any, and reset */
/* Cleanup */

View File

@ -84,10 +84,11 @@ char *defGetType(); /* Forward declaration */
*/
void
defWriteHeader(def, f, oscale)
defWriteHeader(def, f, oscale, units)
CellDef *def; /* Def for which to generate DEF output */
FILE *f; /* Output to this file */
float oscale;
int units; /* Units for UNITS; could be derived from oscale */
{
TileType type;
@ -113,10 +114,10 @@ defWriteHeader(def, f, oscale)
/* technology). */
fprintf(f, " TECHNOLOGY %s ;\n", DBTechName);
/* As I understand it, this refers to the scalefactor of the GDS */
/* file output. Magic does all GDS in nanometers, so the LEF */
/* scalefactor (conversion to microns) is always 1000. */
fprintf(f, " UNITS DISTANCE MICRONS 1000 ;\n");
/* The DEF scalefactor (conversion to microns) is always 1000 */
/* (nanometers) unless overridden on the command line. */
fprintf(f, " UNITS DISTANCE MICRONS %d ;\n", units);
/* Die area, taken from the cell def bounding box. */
fprintf(f, " DIEAREA ( %.10g %.10g ) ( %.10g %.10g ) ;\n",
@ -1820,6 +1821,7 @@ defComponentFunc(cellUse, defdata)
{
FILE *f = defdata->f;
float oscale = defdata->scale;
char *nameroot;
/* Ignore any cellUse that does not have an identifier string. */
if (cellUse->cu_id == NULL) return 0;
@ -1830,8 +1832,17 @@ defComponentFunc(cellUse, defdata)
return 0;
}
/* In case the cd_name contains a path component (it's not supposed to), */
/* remove it. */
nameroot = strrchr(cellUse->cu_def->cd_name, '/');
if (nameroot != NULL)
nameroot++;
else
nameroot = cellUse->cu_def->cd_name;
fprintf(f, " - %s %s\n + PLACED ( %.10g %.10g ) %s ;\n",
cellUse->cu_id, cellUse->cu_def->cd_name,
cellUse->cu_id, nameroot,
(float)cellUse->cu_bbox.r_xbot * oscale,
(float)cellUse->cu_bbox.r_ybot * oscale,
defTransPos(&cellUse->cu_transform));
@ -1864,10 +1875,10 @@ defMakeInverseLayerMap()
TileType i;
char *lefname;
lefMagicToLefLayer = (LefMapping *)mallocMagic(DBNumUserLayers
lefMagicToLefLayer = (LefMapping *)mallocMagic(DBNumTypes
* sizeof(LefMapping));
memset(lefMagicToLefLayer, 0, sizeof(LefMapping) * TT_TECHDEPBASE);
for (i = TT_TECHDEPBASE; i < DBNumUserLayers; i++)
for (i = TT_TECHDEPBASE; i < DBNumTypes; i++)
{
lefname = defGetType(i, &lefl);
lefMagicToLefLayer[i].lefName = lefname;
@ -1916,23 +1927,28 @@ defMakeInverseLayerMap()
*/
void
DefWriteCell(def, outName, allSpecial)
DefWriteCell(def, outName, allSpecial, units)
CellDef *def; /* Cell being written */
char *outName; /* Name of output file, or NULL. */
bool allSpecial; /* Treat all nets as SPECIALNETS? */
int units; /* Force units to this value (default 1000) */
{
char *filename;
FILE *f;
NetCount nets;
int total;
float scale = CIFGetOutputScale(1); /* Note that "1" here corresponds
* to "1000" in the header UNITS line
*/
float scale;
LefMapping *lefMagicToLefLayer;
int i;
lefLayer *lefl;
HashEntry *he;
/* Note that "1" corresponds to "1000" in the header UNITS line, */
/* or units of nanometers. 10 = centimicrons, 1000 = microns. */
scale = CIFGetOutputScale(1000 / units);
f = lefFileOpen(def, outName, ".def", "w", &filename);
TxPrintf("Generating DEF output %s for cell %s:\n", filename, def->cd_name);
@ -1949,7 +1965,7 @@ DefWriteCell(def, outName, allSpecial)
return;
}
defWriteHeader(def, f, scale);
defWriteHeader(def, f, scale, units);
lefMagicToLefLayer = defMakeInverseLayerMap();

View File

@ -61,7 +61,7 @@ CmdLef(w, cmd)
MagWindow *w;
TxCommand *cmd;
{
int option, i, cargs;
int option, i, cargs, units = 1000; /* Default nanometers */
char **msg, *namep;
CellUse *selectedUse;
CellDef *selectedDef;
@ -219,6 +219,25 @@ CmdLef(w, cmd)
else
TxPrintf("The \"-hide\" option is only for lef write\n");
}
else if (!strncmp(cmd->tx_argv[i], "-units", 5))
{
if (is_lef)
TxPrintf("The \"-units\" option is only for def write\n");
else
{
i++;
cargs--;
if ((cmd->tx_argc < i) || (!StrIsInt(cmd->tx_argv[i])))
{
TxPrintf("The \"-units\" option requires an argument.\n");
}
else
{
units = atoi(cmd->tx_argv[i]);
// To do: Check range of units
}
}
}
else goto wrongNumArgs;
cargs--;
}
@ -236,7 +255,7 @@ CmdLef(w, cmd)
else
namep = cmd->tx_argv[2];
if (!is_lef)
DefWriteCell(selectedUse->cu_def, namep, allSpecial);
DefWriteCell(selectedUse->cu_def, namep, allSpecial, units);
else
LefWriteCell(selectedUse->cu_def, namep, selectedUse->cu_def
== EditRootDef, lefTech, lefHide);

View File

@ -126,12 +126,24 @@ LinkedRect *LefReadGeometry();
void LefEstimate();
lefLayer *LefRedefined();
void LefAddViaGeometry();
void LefGenViaGeometry();
Rect *LefReadRect();
TileType LefReadLayer();
LefMapping *defMakeInverseLayerMap();
void LefError(char *, ...); /* Variable argument procedure requires */
/* parameter list. */
void LefError(int, char *, ...); /* Variable argument procedure requires */
/* parameter list. */
/* Definitions for type passed to LefError() */
#define LEF_ERROR 0
#define LEF_WARNING 1
#define LEF_INFO 2
#define LEF_SUMMARY 3
#define DEF_ERROR 4
#define DEF_WARNING 5
#define DEF_INFO 6
#define DEF_SUMMARY 7
#endif /* _LEFINT_H */

View File

@ -32,6 +32,7 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
#include "tiles/tile.h"
#include "utils/hash.h"
#include "utils/undo.h"
#include "utils/utils.h" /* For StrDup() */
#include "database/database.h"
#include "windows/windows.h"
#include "graphics/graphics.h"
@ -279,11 +280,15 @@ LefNextToken(f, ignore_eol)
/*
*------------------------------------------------------------
*
* LefError --
* LefDefError --
*
* Print an error message (via TxError) giving the line
* number of the input file on which the error occurred.
*
* "type" is one of the following (see lef.h):
* LEF_ERROR, LEF_WARNING, LEF_INFO,
* DEF_ERROR, DEF_WARNING, DEF_INFO
*
* Results:
* None.
*
@ -294,34 +299,126 @@ LefNextToken(f, ignore_eol)
*/
void
LefError(char *fmt, ...)
LefError(int type, char *fmt, ...)
{
static int errors = 0;
static int errors = 0, warnings = 0, messages = 0;
va_list args;
if (fmt == NULL) /* Special case: report any errors and reset */
char *lefdeftypes[] = {"LEF", "DEF", "techfile lef section"};
int mode, level;
char *lefdeftype;
switch (type) {
case LEF_INFO:
mode = 0;
level = 0;
break;
case LEF_WARNING:
mode = 0;
level = 1;
break;
case LEF_ERROR:
mode = 0;
level = 2;
break;
case LEF_SUMMARY:
mode = 0;
level = -1;
break;
case DEF_INFO:
mode = 1;
level = 0;
break;
case DEF_WARNING:
mode = 1;
level = 1;
break;
case DEF_ERROR:
mode = 1;
level = 2;
break;
case DEF_SUMMARY:
mode = 1;
level = -1;
break;
}
lefdeftype = lefdeftypes[mode];
if ((fmt == NULL) || (level == -1))
{
/* Special case: report any errors and reset */
if (errors)
{
TxPrintf("LEF Read: encountered %d error%s total.\n", errors,
(errors == 1) ? "" : "s");
errors = 0;
}
TxPrintf("%s Read: encountered %d error%s total.\n",
lefdeftype, errors, (errors == 1) ? "" : "s");
if (warnings)
TxPrintf("%s Read: encountered %d warning%s total.\n",
lefdeftype, warnings, (warnings == 1) ? "" : "s");
errors = 0;
warnings = 0;
messages = 0;
return;
}
if (errors < LEF_MAX_ERRORS)
{
TxError("LEF Read, Line %d: ", lefCurrentLine);
va_start(args, fmt);
Vfprintf(stderr, fmt, args);
va_end(args);
TxFlushErr();
}
else if (errors == LEF_MAX_ERRORS)
TxError("LEF Read: Further errors will not be reported.\n");
switch (level) {
errors++;
case 2:
if (errors < LEF_MAX_ERRORS)
{
if (lefCurrentLine >= 0)
TxError("%s read, Line %d (Error): ", lefdeftype, lefCurrentLine);
else
TxError("%s read (Error): ", lefdeftype);
va_start(args, fmt);
Vfprintf(stderr, fmt, args);
va_end(args);
TxFlushErr();
}
else if (errors == LEF_MAX_ERRORS)
TxError("%s Read: Further errors will not be reported.\n",
lefdeftype);
errors++;
break;
case 1:
if (warnings < LEF_MAX_ERRORS)
{
if (lefCurrentLine >= 0)
TxError("%s read, Line %d (Warning): ", lefdeftype, lefCurrentLine);
else
TxError("%s read (Warning): ", lefdeftype);
va_start(args, fmt);
Vfprintf(stderr, fmt, args);
va_end(args);
TxFlushErr();
}
else if (warnings == LEF_MAX_ERRORS)
TxError("%s read: Further warnings will not be reported.\n",
lefdeftype);
warnings++;
break;
case 0:
if (messages < LEF_MAX_ERRORS)
{
if (lefCurrentLine >= 0)
TxPrintf("%s read, Line %d (Message): ", lefdeftype, lefCurrentLine);
else
TxPrintf("%s read (Message): ", lefdeftype);
va_start(args, fmt);
Vfprintf(stdout, fmt, args);
va_end(args);
TxFlushOut();
}
else if (messages == LEF_MAX_ERRORS)
TxPrintf("%s read: Further messages will not be reported.\n",
lefdeftype);
messages++;
break;
}
}
/*
@ -368,7 +465,7 @@ LefParseEndStatement(f, match)
token = LefNextToken(f, (match == NULL) ? FALSE : TRUE);
if (token == NULL)
{
LefError("Bad file read while looking for END statement\n");
LefError(LEF_ERROR, "Bad file read while looking for END statement\n");
return 0;
}
@ -407,7 +504,7 @@ LefParseEndStatement(f, match)
* None.
*
* Side Effects:
* Reads input from the specified file. Prints an
* reads input from the specified file. Prints an
* error message if the expected END record cannot
* be found.
*
@ -445,7 +542,7 @@ LefSkipSection(f, section)
}
}
LefError("Section %s has no END record!\n", section);
LefError(LEF_ERROR, "Section %s has no END record!\n", section);
return;
}
@ -623,7 +720,7 @@ LefReadLayers(f, obstruct, lreturn, rreturn)
token = LefNextToken(f, TRUE);
if (*token == ';')
{
LefError("Bad Layer statement\n");
LefError(LEF_ERROR, "Bad Layer statement\n");
return -1;
}
else
@ -670,8 +767,8 @@ LefReadLayers(f, obstruct, lreturn, rreturn)
}
if ((curlayer < 0) && ((!lefl) || (lefl->lefClass != CLASS_IGNORE)))
{
LefError("Don't know how to parse layer \"%s\"\n", token);
LefError("Try adding this name to the LEF techfile section\n");
LefError(LEF_ERROR, "Don't know how to parse layer \"%s\"\n", token);
LefError(LEF_ERROR, "Try adding this name to the LEF techfile section\n");
}
}
return curlayer;
@ -736,6 +833,7 @@ LefReadRect(f, curlayer, oscale)
char *token;
float llx, lly, urx, ury;
static Rect paintrect;
Rect lefrect;
bool needMatch = FALSE;
token = LefNextToken(f, TRUE);
@ -768,16 +866,23 @@ LefReadRect(f, curlayer, oscale)
if (*token != ')') goto parse_error;
}
if (curlayer < 0)
LefError("No layer defined for RECT.\n");
{
LefError(LEF_ERROR, "No layer defined for RECT.\n");
paintrect.r_xbot = paintrect.r_ybot = 0;
paintrect.r_xtop = paintrect.r_ytop = 0;
}
else
{
/* Scale coordinates (microns to magic internal units) */
/* Need to scale grid if necessary! */
paintrect.r_xbot = (int)roundf(llx / oscale);
paintrect.r_ybot = (int)roundf(lly / oscale);
paintrect.r_xtop = (int)roundf(urx / oscale);
paintrect.r_ytop = (int)roundf(ury / oscale);
lefrect.r_xbot = (int)roundf(llx / oscale);
lefrect.r_ybot = (int)roundf(lly / oscale);
lefrect.r_xtop = (int)roundf(urx / oscale);
lefrect.r_ytop = (int)roundf(ury / oscale);
/* Insist on non-inverted rectangles */
GeoCanonicalRect(&lefrect, &paintrect);
/* Diagnostic */
/*
@ -791,7 +896,7 @@ LefReadRect(f, curlayer, oscale)
return (&paintrect);
parse_error:
LefError("Bad port geometry: RECT requires 4 values.\n");
LefError(LEF_ERROR, "Bad port geometry: RECT requires 4 values.\n");
return (Rect *)NULL;
}
@ -836,7 +941,7 @@ LefReadPolygon(f, curlayer, oscale, ppoints)
if (token == NULL || *token == ';') break;
if (sscanf(token, "%f", &px) != 1)
{
LefError("Bad X value in polygon.\n");
LefError(LEF_ERROR, "Bad X value in polygon.\n");
LefEndStatement(f);
break;
}
@ -844,12 +949,12 @@ LefReadPolygon(f, curlayer, oscale, ppoints)
token = LefNextToken(f, TRUE);
if (token == NULL || *token == ';')
{
LefError("Missing Y value in polygon point!\n");
LefError(LEF_ERROR, "Missing Y value in polygon point!\n");
break;
}
if (sscanf(token, "%f", &py) != 1)
{
LefError("Bad Y value in polygon.\n");
LefError(LEF_ERROR, "Bad Y value in polygon.\n");
LefEndStatement(f);
break;
}
@ -966,7 +1071,7 @@ LefReadGeometry(lefMacro, f, oscale, do_list)
LinkedRect *newRect, *rectList;
Point *pointList;
int points;
Rect *paintrect, *contact;
Rect *paintrect, *contact = NULL;
static char *geometry_keys[] = {
"LAYER",
@ -987,7 +1092,8 @@ LefReadGeometry(lefMacro, f, oscale, do_list)
keyword = Lookup(token, geometry_keys);
if (keyword < 0)
{
LefError("Unknown keyword \"%s\" in LEF file; ignoring.\n", token);
LefError(LEF_INFO, "Unknown keyword \"%s\" in LEF file; ignoring.\n",
token);
LefEndStatement(f);
continue;
}
@ -1013,7 +1119,7 @@ LefReadGeometry(lefMacro, f, oscale, do_list)
{
// Cut layers defined as contacts use the contact
// dimensions, not the dimension from the LEF file
if (DBIsContact(curlayer) && !(GEO_RECTNULL(contact)))
if (DBIsContact(curlayer) && contact && !(GEO_RECTNULL(contact)))
{
paintrect->r_xbot = (paintrect->r_xbot + paintrect->r_xtop);
paintrect->r_ybot = (paintrect->r_ybot + paintrect->r_ytop);
@ -1082,7 +1188,8 @@ LefReadGeometry(lefMacro, f, oscale, do_list)
case LEF_GEOMETRY_END:
if (LefParseEndStatement(f, NULL) == 0)
{
LefError("Geometry (PORT or OBS) END statement missing.\n");
LefError(LEF_ERROR, "Geometry (PORT or OBS) END "
"statement missing.\n");
keyword = -1;
}
break;
@ -1133,12 +1240,12 @@ LefReadPort(lefMacro, f, pinName, pinNum, pinDir, pinUse, oscale)
/* Set this label to be a port */
if (lefMacro->cd_labels == NULL)
LefError("Internal error: No labels in cell!\n");
LefError(LEF_ERROR, "Internal error: No labels in cell!\n");
else
{
newlab = lefMacro->cd_lastLabel;
if (strcmp(newlab->lab_text, pinName))
LefError("Internal error: Can't find the label!\n");
LefError(LEF_ERROR, "Internal error: Can't find the label!\n");
else /* Make this a port */
newlab->lab_flags = pinNum | pinUse | pinDir | PORT_DIR_MASK;
}
@ -1173,12 +1280,13 @@ enum lef_pin_keys {LEF_DIRECTION = 0, LEF_USE, LEF_PORT, LEF_CAPACITANCE,
LEF_SHAPE, LEF_NETEXPR, LEF_PIN_END};
void
LefReadPin(lefMacro, f, pinname, pinNum, oscale)
LefReadPin(lefMacro, f, pinname, pinNum, oscale, is_imported)
CellDef *lefMacro;
FILE *f;
char *pinname;
int pinNum;
float oscale;
bool is_imported;
{
char *token;
int keyword, subkey;
@ -1247,7 +1355,8 @@ LefReadPin(lefMacro, f, pinname, pinNum, oscale)
keyword = Lookup(token, pin_keys);
if (keyword < 0)
{
LefError("Unknown keyword \"%s\" in LEF file; ignoring.\n", token);
LefError(LEF_INFO, "Unknown keyword \"%s\" in LEF file; ignoring.\n",
token);
LefEndStatement(f);
continue;
}
@ -1257,7 +1366,7 @@ LefReadPin(lefMacro, f, pinname, pinNum, oscale)
token = LefNextToken(f, TRUE);
subkey = Lookup(token, pin_classes);
if (subkey < 0)
LefError("Improper DIRECTION statement\n");
LefError(LEF_ERROR, "Improper DIRECTION statement\n");
else
pinDir = lef_class_to_bitmask[subkey];
LefEndStatement(f);
@ -1266,13 +1375,32 @@ LefReadPin(lefMacro, f, pinname, pinNum, oscale)
token = LefNextToken(f, TRUE);
subkey = Lookup(token, pin_uses);
if (subkey < 0)
LefError("Improper USE statement\n");
LefError(LEF_ERROR, "Improper USE statement\n");
else
pinUse = lef_use_to_bitmask[subkey];
LefEndStatement(f);
break;
case LEF_PORT:
LefReadPort(lefMacro, f, pinname, pinNum, pinDir, pinUse, oscale);
if (is_imported)
{
Label *lab;
LefSkipSection(f, NULL);
/* Skip the port geometry but find the pin name and */
/* annotate with the use and direction. Note that */
/* there may be multiple instances of the label. */
for (lab = lefMacro->cd_labels; lab; lab = lab->lab_next)
{
if (!strcmp(lab->lab_text, pinname))
{
lab->lab_flags &= ~(PORT_USE_MASK | PORT_DIR_MASK |
PORT_CLASS_MASK);
lab->lab_flags = pinNum | pinUse | pinDir | PORT_DIR_MASK;
}
}
}
else
LefReadPort(lefMacro, f, pinname, pinNum, pinDir, pinUse, oscale);
break;
case LEF_CAPACITANCE:
case LEF_ANTENNADIFF:
@ -1290,7 +1418,7 @@ LefReadPin(lefMacro, f, pinname, pinNum, oscale)
case LEF_PIN_END:
if (LefParseEndStatement(f, pinname) == 0)
{
LefError("Pin END statement missing.\n");
LefError(LEF_ERROR, "Pin END statement missing.\n");
keyword = -1;
}
break;
@ -1384,7 +1512,7 @@ LefReadMacro(f, mname, oscale, importForeign)
sprintf(newname, "%250s_%d", mname, suffix);
he = HashFind(&lefDefInitHash, newname);
}
LefError("Cell \"%s\" was already defined in this file. "
LefError(LEF_WARNING, "Cell \"%s\" was already defined in this file. "
"Renaming this cell \"%s\"\n", mname, newname);
lefMacro = DBCellLookDef(newname);
if (lefMacro == NULL)
@ -1424,7 +1552,8 @@ LefReadMacro(f, mname, oscale, importForeign)
keyword = Lookup(token, macro_keys);
if (keyword < 0)
{
LefError("Unknown keyword \"%s\" in LEF file; ignoring.\n", token);
LefError(LEF_INFO, "Unknown keyword \"%s\" in LEF file; ignoring.\n",
token);
LefEndStatement(f);
continue;
}
@ -1450,7 +1579,7 @@ LefReadMacro(f, mname, oscale, importForeign)
LefEndStatement(f);
break;
size_error:
LefError("Bad macro SIZE; requires values X BY Y.\n");
LefError(LEF_ERROR, "Bad macro SIZE; requires values X BY Y.\n");
LefEndStatement(f);
break;
case LEF_ORIGIN:
@ -1469,7 +1598,7 @@ size_error:
LefEndStatement(f);
break;
origin_error:
LefError("Bad macro ORIGIN; requires 2 values.\n");
LefError(LEF_ERROR, "Bad macro ORIGIN; requires 2 values.\n");
LefEndStatement(f);
break;
case LEF_SYMMETRY:
@ -1501,10 +1630,7 @@ origin_error:
TxPrintf(" Macro defines pin %s\n", token);
*/
sprintf(tsave, "%.127s", token);
if (is_imported)
LefSkipSection(f, tsave);
else
LefReadPin(lefMacro, f, tsave, pinNum++, oscale);
LefReadPin(lefMacro, f, tsave, pinNum++, oscale, is_imported);
break;
case LEF_OBS:
/* Diagnostic */
@ -1532,7 +1658,7 @@ origin_error:
case LEF_MACRO_END:
if (LefParseEndStatement(f, mname) == 0)
{
LefError("Macro END statement missing.\n");
LefError(LEF_ERROR, "Macro END statement missing.\n");
keyword = -1;
}
break;
@ -1541,6 +1667,7 @@ origin_error:
}
/* Finish up creating the cell */
DBReComputeBbox(lefMacro);
if (is_imported)
{
@ -1560,36 +1687,45 @@ origin_error:
{
DBAdjustLabelsNew(lefMacro, &TiPlaneRect, 1);
if (!has_size)
if (has_size)
{
LefError(" Macro does not define size: computing from geometry\n");
DBReComputeBbox(lefMacro);
lefMacro->cd_flags |= CDFIXEDBBOX;
propval = (char *)mallocMagic(40);
sprintf(propval, "%d %d %d %d",
lefBBox.r_xbot, lefBBox.r_ybot,
lefBBox.r_xtop, lefBBox.r_ytop);
DBPropPut(lefMacro, "FIXED_BBOX", propval);
}
else
{
int reducer = DBCellFindScale(lefMacro);
LefError(LEF_WARNING, " Macro does not define size: "
"computing from geometry\n");
lefMacro->cd_bbox = lefBBox;
lefMacro->cd_extended = lefBBox;
}
/* Set the placement bounding box property to the current bounding box */
lefMacro->cd_flags |= CDFIXEDBBOX;
propval = (char *)mallocMagic(40);
sprintf(propval, "%d %d %d %d",
/* Set the placement bounding box property to the current bounding box */
lefMacro->cd_flags |= CDFIXEDBBOX;
propval = (char *)mallocMagic(40);
sprintf(propval, "%d %d %d %d",
lefMacro->cd_bbox.r_xbot,
lefMacro->cd_bbox.r_ybot,
lefMacro->cd_bbox.r_xtop,
lefMacro->cd_bbox.r_ytop);
DBPropPut(lefMacro, "FIXED_BBOX", propval);
DRCCheckThis(lefMacro, TT_CHECKPAINT, &lefMacro->cd_bbox);
DBPropPut(lefMacro, "FIXED_BBOX", propval);
DRCCheckThis(lefMacro, TT_CHECKPAINT, &lefMacro->cd_bbox);
}
}
/* Note: When the LEF view is used to annotate an */
/* existing GDS view, then the view is not considered */
/* "abstract"; otherwise, writing GDS output gets very */
/* complicated and inefficient. */
/* Note: The value here is ignored, setting to "TRUE". */
/* The "extract" command only cares that the key exists. */
/* i.e., setting it to "FALSE" would be ineffective. */
if (!is_imported)
DBPropPut(lefMacro, "LEFview", StrDup((char **)NULL, "TRUE"));
DBPropPut(lefMacro, "LEFview", StrDup((char **)NULL, "TRUE"));
DBWAreaChanged(lefMacro, &lefMacro->cd_bbox, DBW_ALLWINDOWS,
&DBAllButSpaceBits);
}
@ -1597,45 +1733,23 @@ origin_error:
/*
*------------------------------------------------------------
*
* LefAddViaGeometry --
* LefGrowVia ---
*
* Read in geometry for a VIA section from a LEF or DEF
* file.
*
* Results:
* None.
*
* Side Effects:
* Adds to the lefLayer record for a via definition.
* For LEF contact types matching magic contact types, size the
* LEF contact cut to cover the minimum rectangle in the other
* layers that satisfies the CIF/GDS contact generation. Use
* the "cifinput" style to determine how much the via layer
* needs to grow to make a contact area. If the "cifinput"
* style is not defined, then determine rules from "cifoutput".
*
*------------------------------------------------------------
*/
void
LefAddViaGeometry(f, lefl, curlayer, oscale)
FILE *f; /* LEF file being read */
lefLayer *lefl; /* pointer to via info */
TileType curlayer; /* current tile type */
float oscale; /* output scaling */
{
void LefGrowVia(curlayer, currect, lefl)
TileType curlayer;
Rect *currect;
LinkedRect *viaLR;
/* Rectangles for vias are read in units of 1/2 lambda */
currect = LefReadRect(f, curlayer, (oscale / 2));
if (currect == NULL) return;
/* Don't create any geometry for unknown layers! */
if (curlayer < 0) return;
/* For LEF contact types matching magic contact types, */
/* size the LEF contact cut to cover the minimum */
/* rectangle in the other layers that satisfies the */
/* CIF/GDS contact generation. Use the "cifinput" style */
/* to determine how much the via layer needs to grow to */
/* make a contact area. If the "cifinput" style is not */
/* defined, then determine rules from "cifoutput". */
lefLayer *lefl;
{
if (DBIsContact(curlayer) && cifCurReadStyle != NULL)
{
int growSize;
@ -1692,12 +1806,12 @@ LefAddViaGeometry(f, lefl, curlayer, oscale)
if ((currect->r_xtop - currect->r_xbot != edgeSize) ||
(currect->r_ytop - currect->r_ybot != edgeSize))
{
LefError("Warning: Cut size for magic type \"%s\" (%d x %d) does "
LefError(LEF_WARNING, "Cut size for magic type \"%s\" (%d x %d) does "
"not match LEF/DEF\n",
DBTypeLongNameTbl[lefl->type],
edgeSize, edgeSize);
LefError(" via cut size (%d x %d). Magic layer cut size will "
"be used!\n",
LefError(LEF_WARNING, "Via cut size (%d x %d). Magic layer "
"cut size will be used!\n",
currect->r_xtop - currect->r_xbot,
currect->r_ytop - currect->r_ybot);
}
@ -1709,6 +1823,142 @@ LefAddViaGeometry(f, lefl, curlayer, oscale)
currect->r_ytop = currect->r_ybot + contSize;
}
}
}
/*
*------------------------------------------------------------
*
* LefGenViaGeometry --
*
* Create geometry for a VIA section from a DEF file
* using via generation parameters.
*
* Results:
* None.
*
* Side Effects:
* Adds to the lefLayer record for a via definition.
*
*------------------------------------------------------------
*/
void
LefGenViaGeometry(f, lefl, sizex, sizey, spacex, spacey,
encbx, encby, enctx, encty, rows, cols,
tlayer, clayer, blayer, oscale)
FILE *f; /* LEF file being read */
lefLayer *lefl; /* pointer to via info */
int sizex, sizey; /* cut size */
int spacex, spacey; /* cut spacing */
int encbx, encby; /* bottom enclosure of cuts */
int enctx, encty; /* top enclosure of cuts */
int rows, cols; /* number of cut rows and columns */
TileType tlayer; /* Top layer type */
TileType clayer; /* Cut layer type */
TileType blayer; /* Bottom layer type */
float oscale; /* output scaling */
{
Rect rect;
int i, j, x, y, w, h, sw, sh;
LinkedRect *viaLR;
float hscale = oscale / 2;
/* Compute top layer rect */
w = (sizex * cols) + (spacex * (cols - 1)) + 2 * enctx;
h = (sizey * rows) + (spacey * (rows - 1)) + 2 * encty;
rect.r_xtop = (int)roundf(w / oscale);
rect.r_xbot = -rect.r_xtop;
rect.r_ytop = (int)roundf(h / oscale);
rect.r_ybot = -rect.r_ytop;
/* Set via area to the top layer */
lefl->info.via.area = rect;
lefl->type = tlayer;
/* Compute bottom layer rect */
w = (sizex * cols) + (spacex * (cols - 1)) + 2 * encbx;
h = (sizey * rows) + (spacey * (rows - 1)) + 2 * encby;
rect.r_xtop = (int)roundf(w / oscale);
rect.r_xbot = -rect.r_xtop;
rect.r_ytop = (int)roundf(h / oscale);
rect.r_ybot = -rect.r_ytop;
viaLR = (LinkedRect *)mallocMagic(sizeof(LinkedRect));
viaLR->r_next = lefl->info.via.lr;
lefl->info.via.lr = viaLR;
viaLR->r_type = blayer;
viaLR->r_r = rect;
w = (sizex * cols) + (spacex * (cols - 1));
h = (sizey * rows) + (spacey * (rows - 1));
x = -w / 2;
y = -h / 2;
for (i = 0; i < cols; i++)
{
for (j = 0; j < rows; j++)
{
rect.r_xbot = (int)roundf(x / hscale);
rect.r_ybot = (int)roundf(y / hscale);
rect.r_xtop = rect.r_xbot + (int)roundf(sizex / hscale);
rect.r_ytop = rect.r_ybot + (int)roundf(sizey / hscale);
/* Expand via to the size used by magic */
LefGrowVia(clayer, &rect, lefl);
viaLR = (LinkedRect *)mallocMagic(sizeof(LinkedRect));
viaLR->r_next = lefl->info.via.lr;
lefl->info.via.lr = viaLR;
viaLR->r_type = clayer;
viaLR->r_r = rect;
y += sizey + spacey;
}
x += sizex + spacex;
y = -h / 2;
}
}
/*
*------------------------------------------------------------
*
* LefAddViaGeometry --
*
* Read in geometry for a VIA section from a LEF or DEF
* file.
*
* Results:
* None.
*
* Side Effects:
* Adds to the lefLayer record for a via definition.
*
*------------------------------------------------------------
*/
void
LefAddViaGeometry(f, lefl, curlayer, oscale)
FILE *f; /* LEF file being read */
lefLayer *lefl; /* pointer to via info */
TileType curlayer; /* current tile type */
float oscale; /* output scaling */
{
Rect *currect;
LinkedRect *viaLR;
/* Rectangles for vias are read in units of 1/2 lambda */
currect = LefReadRect(f, curlayer, (oscale / 2));
if (currect == NULL) return;
/* Don't create any geometry for unknown layers! */
if (curlayer < 0) return;
/* Expand via to the size used by magic */
LefGrowVia(curlayer, currect, lefl);
if (GEO_SAMERECT(lefl->info.via.area, GeoNullRect))
{
@ -1760,7 +2010,7 @@ enum lef_layer_keys {LEF_LAYER_TYPE=0, LEF_LAYER_WIDTH,
LEF_LAYER_PROPERTY, LEF_LAYER_ACDENSITY, LEF_LAYER_DCDENSITY,
LEF_LAYER_MINDENSITY, LEF_LAYER_ANTENNADIFF,
LEF_LAYER_ANTENNAAREA, LEF_LAYER_ANTENNASIDE,
LEF_VIA_DEFAULT, LEF_VIA_LAYER, LEF_VIA_RECT,
LEF_VIA_DEFAULT, LEF_VIA_LAYER, LEF_VIA_RECT, LEF_VIA_FOREIGN,
LEF_VIA_ENCLOSURE, LEF_VIA_PREFERENCLOSURE,
LEF_VIARULE_OVERHANG,
LEF_VIARULE_METALOVERHANG, LEF_VIARULE_VIA,
@ -1814,6 +2064,7 @@ LefReadLayerSection(f, lname, mode, lefl)
"DEFAULT",
"LAYER",
"RECT",
"FOREIGN",
"ENCLOSURE",
"PREFERENCLOSURE",
"OVERHANG",
@ -1838,7 +2089,8 @@ LefReadLayerSection(f, lname, mode, lefl)
keyword = Lookup(token, layer_keys);
if (keyword < 0)
{
LefError("Unknown keyword \"%s\" in LEF file; ignoring.\n", token);
LefError(LEF_INFO, "Unknown keyword \"%s\" in LEF file; ignoring.\n",
token);
LefEndStatement(f);
continue;
}
@ -1850,7 +2102,7 @@ LefReadLayerSection(f, lname, mode, lefl)
{
typekey = Lookup(token, layer_type_keys);
if (typekey < 0)
LefError("Unknown layer type \"%s\" in LEF file; "
LefError(LEF_WARNING, "Unknown layer type \"%s\" in LEF file; "
"ignoring.\n", token);
}
if (lefl->lefClass != typekey)
@ -1859,7 +2111,8 @@ LefReadLayerSection(f, lname, mode, lefl)
/* and so having a different TYPE is an error. */
/* Otherwise just ignore the type. */
if (typekey == CLASS_ROUTE || typekey == CLASS_VIA)
LefError("Attempt to reclassify layer %s from %s to %s\n",
LefError(LEF_ERROR, "Attempt to reclassify layer %s "
"from %s to %s\n",
lname, layer_type_keys[lefl->lefClass],
layer_type_keys[typekey]);
}
@ -1952,6 +2205,7 @@ LefReadLayerSection(f, lname, mode, lefl)
LefAddViaGeometry(f, lefl, curlayer, oscale);
LefEndStatement(f);
break;
case LEF_VIA_FOREIGN:
case LEF_VIARULE_VIA:
case LEF_VIA_ENCLOSURE:
case LEF_VIA_PREFERENCLOSURE:
@ -1962,7 +2216,7 @@ LefReadLayerSection(f, lname, mode, lefl)
case LEF_LAYER_END:
if (LefParseEndStatement(f, lname) == 0)
{
LefError("Layer END statement missing.\n");
LefError(LEF_ERROR, "Layer END statement missing.\n");
keyword = -1;
}
break;
@ -1993,9 +2247,9 @@ enum lef_sections {LEF_VERSION = 0,
LEF_USEMINSPACING, LEF_CLEARANCEMEASURE,
LEF_NAMESCASESENSITIVE,
LEF_PROPERTYDEFS, LEF_UNITS, LEF_SECTION_LAYER,
LEF_SECTION_VIA, LEF_SECTION_VIARULE,
LEF_SECTION_SPACING, LEF_SECTION_SITE, LEF_PROPERTY,
LEF_NOISETABLE, LEF_CORRECTIONTABLE, LEF_IRDROP,
LEF_SECTION_VIA, LEF_SECTION_VIARULE, LEF_SECTION_NONDEFAULTRULE,
LEF_NOWIREEXTENSIONATPIN, LEF_SECTION_SPACING, LEF_SECTION_SITE,
LEF_PROPERTY, LEF_NOISETABLE, LEF_CORRECTIONTABLE, LEF_IRDROP,
LEF_ARRAY, LEF_SECTION_TIMING, LEF_EXTENSION, LEF_MACRO,
LEF_END};
@ -2026,6 +2280,8 @@ LefRead(inName, importForeign)
"LAYER",
"VIA",
"VIARULE",
"NONDEFAULTRULE",
"NOWIREEXTENSIONATPIN",
"SPACING",
"SITE",
"PROPERTY",
@ -2066,13 +2322,15 @@ LefRead(inName, importForeign)
HashInit(&LefCellTable, 32, HT_STRINGKEYS);
HashInit(&lefDefInitHash, 32, HT_STRINGKEYS);
oscale = CIFGetOutputScale(1000);
lefCurrentLine = 0;
while ((token = LefNextToken(f, TRUE)) != NULL)
{
keyword = Lookup(token, sections);
if (keyword < 0)
{
LefError("Unknown keyword \"%s\" in LEF file; ignoring.\n", token);
LefError(LEF_INFO, "Unknown keyword \"%s\" in LEF file; ignoring.\n",
token);
LefEndStatement(f);
continue;
}
@ -2086,6 +2344,7 @@ LefRead(inName, importForeign)
LefEndStatement(f);
break;
case LEF_NAMESCASESENSITIVE:
case LEF_NOWIREEXTENSIONATPIN:
LefEndStatement(f);
break;
case LEF_PROPERTYDEFS:
@ -2123,7 +2382,7 @@ LefRead(inName, importForeign)
LefSkipSection(f, tsave);
else
{
LefError("Warning: Cut type \"%s\" redefined.\n", token);
LefError(LEF_WARNING, "Cut type \"%s\" redefined.\n", token);
lefl = LefRedefined(lefl, token);
LefReadLayerSection(f, tsave, keyword, lefl);
}
@ -2147,7 +2406,7 @@ LefRead(inName, importForeign)
}
else if (DBIsContact(mtype) && (keyword == LEF_SECTION_LAYER))
{
LefError("Layer %s maps to a magic contact layer; "
LefError(LEF_ERROR, "Layer %s maps to a magic contact layer; "
"must be defined in lef section of techfile\n",
token);
LefSkipSection(f, tsave);
@ -2155,7 +2414,7 @@ LefRead(inName, importForeign)
}
else if (!DBIsContact(mtype) && (keyword != LEF_SECTION_LAYER))
{
LefError("Via %s maps to a non-contact magic layer; "
LefError(LEF_ERROR, "Via %s maps to a non-contact magic layer; "
"must be defined in lef section of techfile\n",
token);
LefSkipSection(f, tsave);
@ -2178,7 +2437,8 @@ LefRead(inName, importForeign)
lefl = (lefLayer *)HashGetValue(he);
if (lefl && lefl->type < 0)
{
LefError("Layer %s is only defined for obstructions!\n", token);
LefError(LEF_ERROR, "Layer %s is only defined for "
"obstructions!\n", token);
LefSkipSection(f, tsave);
break;
}
@ -2186,12 +2446,18 @@ LefRead(inName, importForeign)
LefReadLayerSection(f, tsave, keyword, lefl);
break;
case LEF_SECTION_NONDEFAULTRULE:
token = LefNextToken(f, TRUE);
LefError(LEF_INFO, "Defines non-default rule %s (ignored)\n", token);
sprintf(tsave, "%.127s", token);
LefSkipSection(f, tsave);
break;
case LEF_SECTION_SPACING:
LefSkipSection(f, sections[LEF_SECTION_SPACING]);
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;
@ -2228,7 +2494,7 @@ LefRead(inName, importForeign)
case LEF_END:
if (LefParseEndStatement(f, "LIBRARY") == 0)
{
LefError("END statement out of context.\n");
LefError(LEF_ERROR, "END statement out of context.\n");
keyword = -1;
}
break;
@ -2236,7 +2502,7 @@ LefRead(inName, importForeign)
if (keyword == LEF_END) break;
}
TxPrintf("LEF read: Processed %d lines.\n", lefCurrentLine);
LefError(NULL); /* print statement of errors, if any */
LefError(LEF_SUMMARY, NULL); /* print statement of errors, if any */
/* Cleanup */
HashKill(&LefCellTable);

View File

@ -115,6 +115,7 @@ LefTechInit()
HashKill(&LefInfo);
}
HashInit(&LefInfo, 32, HT_STRINGKEYS);
lefCurrentLine = -1;
}
/*
@ -252,17 +253,17 @@ LefTechLine(sectionName, argc, argv)
if (i == 0)
{
LefError("Bad magic layer type \"%s\" in LEF layer definition.\n", argv[1]);
TechError("Bad magic layer type \"%s\" in LEF layer definition.\n", argv[1]);
return TRUE;
}
else if ((i == 2) && (option != LEFTECH_OBS))
{
LefError("Can only define multiple types for via obstruction layers.\n");
TechError("Can only define multiple types for via obstruction layers.\n");
return TRUE;
}
else if (i > 2)
{
LefError("Too many types in LEF layer definition.\n");
TechError("Too many types in LEF layer definition.\n");
return TRUE;
}

View File

@ -741,18 +741,18 @@ lefWriteMacro(def, f, scale, hide)
propvalue = (char *)DBPropGet(def, "LEFclass", &propfound);
if (propfound)
{
fprintf(f, " CLASS %s\n", propvalue);
fprintf(f, " CLASS %s ;\n", propvalue);
class = propvalue;
}
else
{
/* Needs a class of some kind. Use BLOCK as default if not defined */
fprintf(f, " CLASS BLOCK\n");
fprintf(f, " CLASS BLOCK ;\n");
}
propvalue = (char *)DBPropGet(def, "LEFsource", &propfound);
if (propfound)
fprintf(f, " SOURCE %s\n", propvalue);
fprintf(f, " SOURCE %s ;\n", propvalue);
fprintf(f, " FOREIGN %s ;\n", def->cd_name);
@ -787,7 +787,7 @@ lefWriteMacro(def, f, scale, hide)
propvalue = (char *)DBPropGet(def, "LEFsymmetry", &propfound);
if (propfound)
fprintf(f, " SYMMETRY %s\n", propvalue);
fprintf(f, " SYMMETRY %s ;\n", propvalue);
/* Generate cell for yanking obstructions */

View File

@ -22,6 +22,13 @@ lispFrame.o: lispFrame.c ../lisp/lisp.h lispInt.h ../utils/magic.h \
lispTrace.o: lispTrace.c ../lisp/lisp.h lispInt.h ../utils/magic.h \
../utils/geometry.h ../textio/txcommands.h ../textio/textio.h \
../utils/malloc.h
lispMagic.o: lispMagic.c ../lisp/lisp.h lispInt.h ../utils/magic.h \
../utils/geometry.h ../textio/txcommands.h lispargs.h ../utils/geofast.h \
../textio/textio.h ../utils/malloc.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../commands/commands.h ../select/select.h
lispArith.o: lispArith.c ../lisp/lisp.h lispInt.h ../utils/magic.h \
../utils/geometry.h ../textio/txcommands.h lispargs.h ../textio/textio.h \
../utils/malloc.h

View File

@ -1,100 +1,135 @@
mzBlock.o: mzBlock.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/malloc.h \
../utils/list.h ../debug/debug.h ../utils/heap.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzDebug.o: mzDebug.c ../utils/magic.h ../utils/signals.h \
../textio/textio.h ../utils/hash.h ../utils/geometry.h ../tiles/tile.h \
../database/database.h ../utils/malloc.h ../utils/list.h ../utils/heap.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../utils/list.h ../utils/heap.h \
../mzrouter/mzrouter.h ../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzEstimate.o: mzEstimate.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/malloc.h \
../utils/list.h ../debug/debug.h ../utils/heap.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzXtndDown.o: mzXtndDown.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h ../utils/heap.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../utils/list.h ../debug/debug.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzXtndLeft.o: mzXtndLeft.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h ../utils/heap.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../utils/list.h ../debug/debug.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzXtndRght.o: mzXtndRght.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h ../utils/heap.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../utils/list.h ../debug/debug.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzXtndUp.o: mzXtndUp.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h ../utils/heap.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../utils/list.h ../debug/debug.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzHint.o: mzHint.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/malloc.h \
../utils/list.h ../debug/debug.h ../utils/heap.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzInit.o: mzInit.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../drc/drc.h ../select/select.h \
../utils/signals.h ../textio/textio.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../debug/debug.h ../utils/undo.h \
../textio/txcommands.h ../utils/malloc.h ../utils/list.h ../utils/heap.h \
../mzrouter/mzrouter.h ../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h ../drc/drc.h \
../select/select.h ../utils/signals.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/styles.h \
../debug/debug.h ../utils/undo.h ../textio/txcommands.h \
../utils/malloc.h ../utils/list.h ../utils/heap.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzNumLine.o: mzNumLine.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/malloc.h \
../utils/list.h ../debug/debug.h ../utils/heap.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzMain.o: mzMain.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../drc/drc.h ../select/select.h \
../utils/signals.h ../textio/textio.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../debug/debug.h ../utils/undo.h \
../textio/txcommands.h ../utils/malloc.h ../utils/main.h \
../utils/geofast.h ../utils/list.h ../utils/heap.h \
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h ../drc/drc.h \
../select/select.h ../utils/signals.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/styles.h \
../debug/debug.h ../utils/undo.h ../textio/txcommands.h \
../utils/malloc.h ../utils/main.h ../utils/list.h ../utils/heap.h \
../utils/touchingtypes.h ../mzrouter/mzrouter.h ../utils/list.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzSearch.o: mzSearch.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../utils/hash.h ../utils/heap.h ../tiles/tile.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../utils/malloc.h ../utils/list.h ../debug/debug.h ../utils/styles.h \
../windows/windows.h ../dbwind/dbwind.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzStart.o: mzStart.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h ../utils/heap.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../utils/list.h ../debug/debug.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzSubrs.o: mzSubrs.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../drc/drc.h ../select/select.h \
../utils/signals.h ../textio/textio.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../debug/debug.h ../utils/undo.h \
../textio/txcommands.h ../utils/malloc.h ../utils/main.h \
../utils/geofast.h ../utils/list.h ../utils/touchingtypes.h \
../utils/heap.h ../mzrouter/mzrouter.h ../mzrouter/mzInternal.h \
../mzrouter/mzDebug.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h ../drc/drc.h \
../select/select.h ../utils/signals.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/styles.h \
../debug/debug.h ../utils/undo.h ../textio/txcommands.h \
../utils/malloc.h ../utils/main.h ../utils/list.h \
../utils/touchingtypes.h ../utils/heap.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzTech.o: mzTech.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../utils/heap.h ../tiles/tile.h ../database/database.h \
../utils/signals.h ../textio/textio.h ../wiring/wiring.h \
../utils/utils.h ../utils/tech.h ../utils/malloc.h ../utils/list.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../wiring/wiring.h ../utils/tech.h ../utils/malloc.h ../utils/list.h \
../windows/windows.h ../utils/main.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzTestCmd.o: mzTestCmd.c ../utils/magic.h ../utils/geometry.h \
../utils/hash.h ../tiles/tile.h ../database/database.h \
../utils/signals.h ../textio/textio.h ../irouter/irouter.h \
../graphics/graphics.h ../windows/windows.h ../dbwind/dbwind.h \
../dbwind/dbwtech.h ../textio/txcommands.h ../utils/main.h \
../utils/utils.h ../commands/commands.h ../utils/styles.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../irouter/irouter.h ../graphics/graphics.h ../windows/windows.h \
../dbwind/dbwind.h ../dbwind/dbwtech.h ../textio/txcommands.h \
../utils/main.h ../commands/commands.h ../utils/styles.h \
../utils/malloc.h ../utils/list.h ../utils/heap.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h
mzWalk.o: mzWalk.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h ../utils/heap.h \
../database/database.h ../utils/signals.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/signals.h ../textio/textio.h \
../utils/list.h ../debug/debug.h ../mzrouter/mzrouter.h \
../mzrouter/mzInternal.h ../mzrouter/mzDebug.h

View File

@ -1,46 +1,68 @@
NMbutton.o: NMbutton.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../graphics/graphics.h ../dbwind/dbwind.h \
../textio/textio.h ../textio/txcommands.h ../netmenu/nmInt.h \
../netmenu/netmenu.h ../utils/styles.h ../utils/main.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../textio/textio.h ../textio/txcommands.h \
../netmenu/nmInt.h ../netmenu/netmenu.h ../utils/styles.h \
../utils/main.h
NMcmdAK.o: NMcmdAK.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../windows/windows.h \
../textio/txcommands.h ../netmenu/nmInt.h ../netmenu/netmenu.h \
../utils/main.h ../textio/textio.h ../utils/malloc.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../textio/txcommands.h ../netmenu/nmInt.h \
../netmenu/netmenu.h ../utils/main.h ../textio/textio.h \
../utils/malloc.h
NMcmdLZ.o: NMcmdLZ.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../windows/windows.h \
../textio/txcommands.h ../netmenu/nmInt.h ../netmenu/netmenu.h \
../dbwind/dbwind.h ../utils/styles.h ../utils/main.h ../textio/textio.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../textio/txcommands.h ../netmenu/nmInt.h \
../netmenu/netmenu.h ../dbwind/dbwind.h ../utils/styles.h \
../utils/main.h ../textio/textio.h
NMlabel.o: NMlabel.c ../utils/magic.h ../utils/geometry.h \
../utils/utils.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../utils/main.h ../dbwind/dbwind.h \
../netmenu/nmInt.h ../textio/textio.h ../textio/txcommands.h \
../commands/commands.h ../utils/styles.h ../utils/malloc.h
NMmain.o: NMmain.c ../utils/magic.h ../utils/geometry.h \
../windows/windows.h ../graphics/graphics.h ../graphics/glyphs.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../dbwind/dbwind.h ../textio/textio.h ../utils/styles.h \
../textio/txcommands.h ../netmenu/nmInt.h ../netmenu/netmenu.h \
../utils/undo.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../dbwind/dbwind.h ../textio/textio.h \
../utils/styles.h ../textio/txcommands.h ../netmenu/nmInt.h \
../netmenu/netmenu.h ../utils/undo.h
NMnetlist.o: NMnetlist.c ../utils/magic.h ../utils/utils.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../utils/main.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h \
../textio/textio.h ../netmenu/nmInt.h ../utils/undo.h ../utils/malloc.h \
../netmenu/netmenu.h
NMshowpt.o: NMshowpt.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../graphics/graphics.h ../dbwind/dbwind.h \
../utils/styles.h ../utils/main.h ../utils/malloc.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../utils/styles.h ../utils/main.h ../utils/malloc.h
NMshowcell.o: NMshowcell.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../graphics/graphics.h ../dbwind/dbwind.h \
../utils/styles.h ../textio/textio.h ../utils/main.h ../netmenu/nmInt.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../utils/styles.h ../textio/textio.h ../utils/main.h \
../netmenu/nmInt.h
NMundo.o: NMundo.c ../utils/magic.h ../utils/geometry.h \
../windows/windows.h ../netmenu/netmenu.h ../netmenu/nmInt.h \
../utils/undo.h ../utils/utils.h
NMwiring.o: NMwiring.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../netmenu/netmenu.h ../netmenu/nmInt.h ../textio/textio.h \
../utils/styles.h ../drc/drc.h ../utils/malloc.h ../router/router.h \
../utils/utils.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../netmenu/netmenu.h ../netmenu/nmInt.h \
../textio/textio.h ../utils/styles.h ../drc/drc.h ../utils/malloc.h \
../router/router.h

View File

@ -1,41 +1,58 @@
plotCmd.o: plotCmd.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h ../utils/utils.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../textio/txcommands.h ../plow/plow.h ../select/select.h \
../commands/commands.h ../plot/plotInt.h
plotGremln.o: plotGremln.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/tech.h \
../utils/malloc.h ../utils/utils.h ../windows/windows.h \
../commands/commands.h ../dbwind/dbwind.h ../textio/textio.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/tech.h ../utils/malloc.h \
../windows/windows.h ../commands/commands.h ../dbwind/dbwind.h \
../textio/textio.h
plotHP.o: plotHP.c ../utils/malloc.h ../plot/plotInt.h ../utils/magic.h \
../utils/geometry.h
plotPS.o: plotPS.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../utils/tech.h ../utils/malloc.h \
../utils/utils.h ../windows/windows.h ../commands/commands.h \
../dbwind/dbwind.h ../textio/textio.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../utils/tech.h ../utils/malloc.h ../windows/windows.h \
../commands/commands.h ../dbwind/dbwind.h ../textio/textio.h
plotMain.o: plotMain.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/tech.h \
../utils/malloc.h ../plot/plotInt.h ../textio/textio.h ../utils/utils.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/tech.h ../utils/malloc.h \
../plot/plotInt.h ../textio/textio.h
plotRutils.o: plotRutils.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../plot/plotInt.h \
../textio/textio.h ../utils/utils.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../plot/plotInt.h \
../textio/textio.h
plotVers.o: plotVers.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../plot/plotInt.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../plot/plotInt.h \
../windows/windows.h ../commands/commands.h ../textio/textio.h \
../utils/utils.h ../utils/tech.h ../utils/signals.h ../dbwind/dbwind.h \
../cif/cif.h
../utils/tech.h ../utils/signals.h ../dbwind/dbwind.h ../cif/cif.h
plotPixels.o: plotPixels.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../dbwind/dbwtech.h ../utils/malloc.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../dbwind/dbwtech.h ../utils/malloc.h \
../plot/plotInt.h ../windows/windows.h ../commands/commands.h \
../textio/textio.h ../utils/utils.h ../utils/tech.h ../utils/signals.h \
../utils/styles.h ../graphics/graphics.h ../dbwind/dbwind.h
../textio/textio.h ../utils/tech.h ../utils/signals.h ../utils/styles.h \
../graphics/graphics.h ../dbwind/dbwind.h
plotPNM.o: plotPNM.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/tech.h ../utils/malloc.h \
../utils/utils.h ../utils/styles.h ../windows/windows.h \
../graphics/graphics.h ../dbwind/dbwtech.h ../dbwind/dbwind.h \
../utils/main.h ../commands/commands.h ../textio/textio.h \
../utils/signals.h ../plot/plotInt.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/tech.h ../utils/malloc.h \
../utils/styles.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwtech.h ../dbwind/dbwind.h ../utils/main.h \
../commands/commands.h ../textio/textio.h ../utils/signals.h \
../plot/plotInt.h

View File

@ -196,6 +196,7 @@ PlotFreeRaster(raster)
* have been created with PlotNewRaster.
*/
{
if (raster == NULL) return;
freeMagic((char *) raster->ras_bits);
freeMagic((char *) raster);
}

View File

@ -1084,7 +1084,7 @@ PlotVersatec(scx, layers, xMask, user_scale)
Raster *raster = NULL;
/* CMYK color separated raster buffers. */
Raster *kRaster, *cRaster, *mRaster, *yRaster;
Raster *kRaster = NULL, *cRaster = NULL, *mRaster = NULL, *yRaster = NULL;
haveColorMessage = FALSE;
GeoTransRect(&scx->scx_trans, &scx->scx_area, &rootClip);

View File

@ -1,50 +1,84 @@
PlowCmd.o: PlowCmd.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../textio/txcommands.h ../plow/plow.h ../select/select.h
PlowJogs.o: PlowJogs.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/undo.h \
../plow/plow.h ../plow/plowInt.h ../plow/plowDebugInt.h \
../utils/malloc.h ../debug/debug.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/undo.h ../plow/plow.h ../plow/plowInt.h \
../plow/plowDebugInt.h ../utils/malloc.h ../debug/debug.h
PlowMain.o: PlowMain.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/undo.h \
../debug/debug.h ../plow/plow.h ../plow/plowInt.h ../plow/plowDebugInt.h \
../textio/textio.h ../windows/windows.h ../dbwind/dbwind.h ../drc/drc.h \
../utils/styles.h ../utils/malloc.h ../utils/signals.h ../utils/main.h \
../select/select.h ../graphics/graphics.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/undo.h ../debug/debug.h ../plow/plow.h \
../plow/plowInt.h ../plow/plowDebugInt.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../drc/drc.h ../utils/styles.h \
../utils/malloc.h ../utils/signals.h ../utils/main.h ../select/select.h \
../graphics/graphics.h
PlowQueue.o: PlowQueue.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../debug/debug.h \
../plow/plowInt.h ../plow/plowDebugInt.h ../utils/malloc.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../debug/debug.h ../plow/plowInt.h \
../plow/plowDebugInt.h ../utils/malloc.h
PlowRandom.o: PlowRandom.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../plow/plowInt.h \
../plow/plowDebugInt.h ../textio/textio.h ../utils/undo.h \
../utils/signals.h ../extract/extract.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../plow/plowInt.h ../plow/plowDebugInt.h \
../textio/textio.h ../utils/undo.h ../utils/signals.h \
../extract/extract.h
PlowRules1.o: PlowRules1.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/undo.h \
../plow/plow.h ../plow/plowInt.h ../plow/plowDebugInt.h ../drc/drc.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/undo.h ../plow/plow.h ../plow/plowInt.h \
../plow/plowDebugInt.h ../drc/drc.h
PlowRules2.o: PlowRules2.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/undo.h \
../plow/plow.h ../plow/plowInt.h ../plow/plowDebugInt.h ../drc/drc.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/undo.h ../plow/plow.h ../plow/plowInt.h \
../plow/plowDebugInt.h ../drc/drc.h
PlowRules3.o: PlowRules3.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/undo.h \
../plow/plow.h ../plow/plowInt.h ../plow/plowDebugInt.h ../drc/drc.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/undo.h ../plow/plow.h ../plow/plowInt.h \
../plow/plowDebugInt.h ../drc/drc.h
PlowSearch.o: PlowSearch.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../plow/plowInt.h \
../plow/plowDebugInt.h ../utils/stack.h ../textio/textio.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../plow/plowInt.h ../plow/plowDebugInt.h \
../utils/stack.h ../textio/textio.h
PlowTech.o: PlowTech.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/utils.h \
../utils/malloc.h ../plow/plowInt.h ../plow/plowDebugInt.h ../drc/drc.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../plow/plowInt.h \
../plow/plowDebugInt.h ../drc/drc.h
PlowTest.o: PlowTest.c ../utils/magic.h ../utils/styles.h \
../utils/utils.h ../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../utils/undo.h ../database/database.h ../windows/windows.h \
../utils/undo.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/geofast.h ../bplane/bplaneInt.h ../windows/windows.h \
../graphics/graphics.h ../dbwind/dbwind.h ../utils/main.h \
../commands/commands.h ../drc/drc.h ../debug/debug.h ../plow/plowInt.h \
../plow/plowDebugInt.h ../textio/textio.h ../textio/txcommands.h
PlowWidth.o: PlowWidth.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../plow/plowInt.h \
../plow/plowDebugInt.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../plow/plowInt.h ../plow/plowDebugInt.h
PlowYank.o: PlowYank.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/undo.h ../debug/debug.h ../plow/plow.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/undo.h ../debug/debug.h ../plow/plow.h \
../plow/plowInt.h ../plow/plowDebugInt.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../drc/drc.h

View File

@ -1,81 +1,110 @@
ResMain.o: ResMain.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/tech.h \
../textio/txcommands.h ../resis/resis.h
ResJunct.o: ResJunct.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/databaseInt.h ../utils/malloc.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../utils/malloc.h \
../textio/textio.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/stack.h ../utils/tech.h ../textio/txcommands.h ../resis/resis.h
ResMakeRes.o: ResMakeRes.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/tech.h \
../textio/txcommands.h ../resis/resis.h
ResSimple.o: ResSimple.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h ../utils/heap.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/stack.h ../utils/tech.h \
../textio/txcommands.h ../resis/resis.h
ResPrint.o: ResPrint.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/utils.h ../cif/cif.h \
../utils/tech.h ../textio/txcommands.h ../utils/stack.h \
../utils/styles.h ../resis/resis.h
../windows/windows.h ../dbwind/dbwind.h ../cif/cif.h ../utils/tech.h \
../textio/txcommands.h ../utils/stack.h ../utils/styles.h \
../resis/resis.h
ResReadSim.o: ResReadSim.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/utils.h ../utils/tech.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/tech.h \
../textio/txcommands.h ../resis/resis.h
ResConDCS.o: ResConDCS.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../utils/signals.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/tech.h ../textio/txcommands.h ../resis/resis.h
ResRex.o: ResRex.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../utils/undo.h ../database/database.h ../utils/malloc.h \
../utils/undo.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../bplane/bplaneInt.h ../utils/malloc.h \
../textio/textio.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/utils.h ../utils/tech.h ../textio/txcommands.h ../resis/resis.h
../utils/tech.h ../textio/txcommands.h ../resis/resis.h
ResBasic.o: ResBasic.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/tech.h \
../textio/txcommands.h ../resis/resis.h
ResMerge.o: ResMerge.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../resis/resis.h
ResChecks.o: ResChecks.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/utils.h ../utils/tech.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/tech.h \
../textio/txcommands.h ../utils/stack.h ../resis/resis.h
ResFract.o: ResFract.c ../utils/magic.h ../utils/geometry.h \
../textio/txcommands.h ../tiles/tile.h ../utils/signals.h \
../utils/hash.h ../database/database.h ../database/databaseInt.h \
../utils/malloc.h ../windows/windows.h ../utils/main.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../database/databaseInt.h ../utils/malloc.h ../windows/windows.h \
../utils/main.h
ResUtils.o: ResUtils.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/stack.h ../utils/tech.h \
../textio/txcommands.h ../resis/resis.h
ResDebug.o: ResDebug.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/utils.h ../utils/tech.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/tech.h \
../textio/txcommands.h ../utils/stack.h ../resis/resis.h

View File

@ -1,26 +1,35 @@
rtrCmd.o: rtrCmd.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/styles.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h ../utils/utils.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../textio/txcommands.h ../select/select.h \
../commands/commands.h ../utils/heap.h ../router/router.h \
../utils/netlist.h ../netmenu/netmenu.h ../gcr/gcr.h \
../grouter/grouter.h ../grouter/grouteDebug.h
rtrMain.o: rtrMain.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../utils/heap.h ../tiles/tile.h ../database/database.h ../gcr/gcr.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../utils/signals.h ../router/rtrDcmpose.h ../netmenu/netmenu.h \
../router/router.h ../grouter/grouter.h ../grouter/grouteDebug.h \
../utils/netlist.h ../textio/textio.h ../utils/runstats.h
../utils/heap.h ../tiles/tile.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../gcr/gcr.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/main.h ../utils/signals.h \
../router/rtrDcmpose.h ../netmenu/netmenu.h ../router/router.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../utils/netlist.h \
../textio/textio.h ../utils/runstats.h
rtrDcmpose.o: rtrDcmpose.c ../utils/magic.h ../textio/textio.h \
../utils/geometry.h ../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../utils/main.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h \
../dbwind/dbwind.h ../utils/heap.h ../utils/undo.h ../router/router.h \
../router/rtrDcmpose.h ../gcr/gcr.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../utils/netlist.h ../utils/styles.h \
../utils/malloc.h ../netmenu/netmenu.h ../debug/debug.h
rtrFdback.o: rtrFdback.c ../utils/magic.h ../utils/geometry.h \
../utils/styles.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../utils/main.h ../utils/utils.h ../gcr/gcr.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h ../gcr/gcr.h \
../router/router.h ../utils/heap.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../utils/netlist.h ../textio/textio.h \
../dbwind/dbwind.h ../utils/malloc.h
@ -28,41 +37,60 @@ rtrHazards.o: rtrHazards.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../gcr/gcr.h ../utils/malloc.h
rtrChannel.o: rtrChannel.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../utils/hash.h ../utils/heap.h ../tiles/tile.h \
../database/database.h ../gcr/gcr.h ../windows/windows.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../gcr/gcr.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/signals.h ../utils/main.h ../router/router.h \
../router/rtrDcmpose.h ../grouter/grouter.h ../grouter/grouteDebug.h \
../textio/textio.h ../utils/styles.h
rtrPaint.o: rtrPaint.c ../utils/magic.h ../utils/geometry.h \
../utils/hash.h ../utils/heap.h ../tiles/tile.h ../database/database.h \
../gcr/gcr.h ../utils/signals.h ../router/router.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../gcr/gcr.h ../utils/signals.h ../router/router.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/main.h
rtrPin.o: rtrPin.c ../utils/magic.h ../utils/geometry.h ../utils/styles.h \
../utils/hash.h ../utils/heap.h ../debug/debug.h ../tiles/tile.h \
../database/database.h ../gcr/gcr.h ../windows/windows.h ../utils/main.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../gcr/gcr.h ../windows/windows.h ../utils/main.h \
../dbwind/dbwind.h ../utils/signals.h ../router/router.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../textio/textio.h
rtrSide.o: rtrSide.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../utils/heap.h ../utils/malloc.h ../debug/debug.h ../tiles/tile.h \
../database/database.h ../router/router.h ../gcr/gcr.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../router/router.h ../gcr/gcr.h \
../grouter/grouter.h ../grouter/grouteDebug.h ../textio/textio.h \
../windows/windows.h ../utils/main.h ../utils/signals.h
rtrStem.o: rtrStem.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../tiles/tile.h ../database/database.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../router/router.h ../gcr/gcr.h \
../utils/heap.h ../grouter/grouter.h ../grouter/grouteDebug.h \
../utils/netlist.h ../textio/textio.h ../utils/main.h ../utils/malloc.h \
../debug/debug.h ../utils/signals.h ../utils/maxrect.h
../tiles/tile.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/styles.h \
../router/router.h ../gcr/gcr.h ../utils/heap.h ../grouter/grouter.h \
../grouter/grouteDebug.h ../utils/netlist.h ../textio/textio.h \
../utils/main.h ../utils/malloc.h ../debug/debug.h ../utils/signals.h \
../utils/maxrect.h
rtrTech.o: rtrTech.c ../utils/magic.h ../utils/utils.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/tech.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/tech.h ../textio/textio.h \
../windows/windows.h ../dbwind/dbwind.h ../router/router.h
rtrVia.o: rtrVia.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../utils/heap.h ../database/database.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../netmenu/netmenu.h ../textio/textio.h ../utils/styles.h \
../utils/malloc.h ../gcr/gcr.h ../router/router.h ../router/routerInt.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/main.h ../netmenu/netmenu.h ../textio/textio.h \
../utils/styles.h ../utils/malloc.h ../gcr/gcr.h ../router/router.h \
../router/routerInt.h
rtrTravers.o: rtrTravers.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../utils/signals.h ../utils/malloc.h ../router/router.h \
../windows/windows.h ../utils/main.h ../gcr/gcr.h ../router/routerInt.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/signals.h ../utils/malloc.h \
../router/router.h ../windows/windows.h ../utils/main.h ../gcr/gcr.h \
../router/routerInt.h

View File

@ -310,6 +310,7 @@ RtrChannelObstacles(use, ch)
scx.scx_area.r_ytop += w * RtrGridSpacing + down;
scx.scx_use = use;
scx.scx_trans = GeoIdentityTransform;
TTMaskZero(&allObs);
TTMaskSetMask3(&allObs, &RtrMetalObstacles, &RtrPolyObstacles);
(void) DBTreeSrTiles(&scx, &allObs, 0, rtrChannelObstacleMark, (ClientData) ch);

View File

@ -20,7 +20,7 @@ ${DEPEND_FILE}:
# Original Depend file generating line:
# ${CC} ${CFLAGS} ${CPPFLAGS} ${DFLAGS} ${DEPEND_FLAG} ${SRCS} > ${DEPEND_FILE}
.c.o:
.c.o: ../database/database.h
@echo --- compiling ${MODULE}/$*.o
${RM} $*.o
${CC} ${CFLAGS} ${CPPFLAGS} ${DFLAGS} -c $*.c
@ -47,10 +47,6 @@ ${DESTDIR}${BINDIR}/${MODULE}${EXEEXT}: ${MODULE}${EXEEXT}
${RM} ${DESTDIR}${BINDIR}/${MODULE}${EXEEXT}
${CP} ${MODULE}${EXEEXT} ${DESTDIR}${BINDIR}
../database/database.h: ../database/database.h.in
@echo --- making header file database/database.h
${SCRIPTS}/makedbh ../database/database.h.in ../database/database.h
clean:
${RM} ${CLEANS}

View File

@ -125,7 +125,7 @@ configure: failed program was:
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define MAGIC_VERSION "8.2"
| #define MAGIC_REVISION "53"
| #define MAGIC_REVISION "101"
| /* end confdefs.h. */
| #include <ac_nonexistent.h>
configure:3476: result: gcc -E
@ -146,7 +146,7 @@ configure: failed program was:
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define MAGIC_VERSION "8.2"
| #define MAGIC_REVISION "53"
| #define MAGIC_REVISION "101"
| /* end confdefs.h. */
| #include <ac_nonexistent.h>
configure:3596: checking for g++
@ -302,7 +302,7 @@ configure: failed program was:
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define MAGIC_VERSION "8.2"
| #define MAGIC_REVISION "53"
| #define MAGIC_REVISION "101"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
@ -343,7 +343,7 @@ configure: failed program was:
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define MAGIC_VERSION "8.2"
| #define MAGIC_REVISION "53"
| #define MAGIC_REVISION "101"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
@ -433,7 +433,7 @@ configure: failed program was:
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define MAGIC_VERSION "8.2"
| #define MAGIC_REVISION "53"
| #define MAGIC_REVISION "101"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
@ -506,7 +506,7 @@ configure: failed program was:
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define MAGIC_VERSION "8.2"
| #define MAGIC_REVISION "53"
| #define MAGIC_REVISION "101"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
@ -634,7 +634,7 @@ configure:7575: checking for cairo_user_to_device in -lcairo
configure:7600: gcc -o conftest -g -lm conftest.c -lcairo -lGLU -lGL >&5
configure:7600: $? = 0
configure:7609: result: yes
configure:8414: creating ./config.status
configure:8417: creating ./config.status
## ---------------------- ##
## Running config.status. ##
@ -759,7 +759,7 @@ CPPFLAGS=''
CSH='/bin/csh'
CXX='g++'
CXXFLAGS='-g -O2'
DEFS='-DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DMAGIC_VERSION=\"8.2\" -DMAGIC_REVISION=\"53\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHAVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1'
DEFS='-DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DMAGIC_VERSION=\"8.2\" -DMAGIC_REVISION=\"101\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHAVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1'
DEPEND_FLAG='-MM'
ECHO_C=''
ECHO_N='printf'
@ -784,7 +784,7 @@ LIB_SPECS=' -L/usr/lib64 -ltkstub8.6 -L/usr/lib64 -ltclstub8.6'
LIB_SPECS_NOSTUB=' -L/usr/lib64 -ltk8.6 -L/usr/lib64 -ltcl8.6'
LTLIBOBJS=''
M4='/bin/m4'
MAGIC_REVISION='53'
MAGIC_REVISION='101'
MAGIC_VERSION='8.2'
MCPP='${MAGICDIR}/scripts/preproc.py'
OA=''
@ -886,7 +886,7 @@ unused=' readline lisp'
#define PACKAGE_BUGREPORT ""
#define PACKAGE_URL ""
#define MAGIC_VERSION "8.2"
#define MAGIC_REVISION "53"
#define MAGIC_REVISION "101"
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1

View File

@ -427,7 +427,7 @@ Copyright (C) 2012 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
ac_pwd='/home/tim/gitsrc/magic-8.2/scripts'
ac_pwd='/home/tim/gitsrc/magic/scripts'
srcdir='..'
INSTALL='/bin/install -c'
test -n "$AWK" || AWK=awk
@ -588,7 +588,7 @@ S["INSTALL_TARGET"]="install-tcl"
S["ALL_TARGET"]="tcl"
S["OA_LIBS"]=""
S["OA"]=""
S["MAGIC_REVISION"]="53"
S["MAGIC_REVISION"]="101"
S["MAGIC_VERSION"]="8.2"
S["SCPP"]="gcc -E -x c"
S["MCPP"]="${MAGICDIR}/scripts/preproc.py"
@ -676,11 +676,11 @@ S["ECHO_T"]=""
S["ECHO_N"]="-n"
S["ECHO_C"]=""
S["DEFS"]="-DPACKAGE_NAME=\\\"\\\" -DPACKAGE_TARNAME=\\\"\\\" -DPACKAGE_VERSION=\\\"\\\" -DPACKAGE_STRING=\\\"\\\" -DPACKAGE_BUGREPORT=\\\"\\\" -DPACKAGE_URL=\\\"\\\" -DMAGIC_VERSION="\
"\\\"8.2\\\" -DMAGIC_REVISION=\\\"53\\\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHA"\
"VE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_U"\
"NSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE"\
"_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHA"\
"VE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1"
"\\\"8.2\\\" -DMAGIC_REVISION=\\\"101\\\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DH"\
"AVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_"\
"UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAV"\
"E_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DH"\
"AVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1"
S["mandir"]="${datarootdir}/man"
S["localedir"]="${datarootdir}/locale"
S["libdir"]="${exec_prefix}/lib"

View File

@ -62,16 +62,16 @@ LIB_SPECS_NOSTUB = -L/usr/lib64 -ltk8.6 -L/usr/lib64 -ltcl8.6
WISH_EXE = /usr/bin/wish
TCL_LIB_DIR = /usr/lib
MAGIC_VERSION = 8.2
MAGIC_REVISION = 53
MAGIC_REVISION = 101
CC = gcc
CPP = gcc -E
CXX = g++
CPPFLAGS = -I. -I${MAGICDIR}
DFLAGS = -DCAD_DIR=\"${LIBDIR}\" -DBIN_DIR=\"${BINDIR}\" -DTCL_DIR=\"${TCLDIR}\" -DUSE_TCL_STUBS -DUSE_TK_STUBS -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DMAGIC_VERSION=\"8.2\" -DMAGIC_REVISION=\"53\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHAVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1 -DGCORE=\"/bin/gcore\"
DFLAGS = -DCAD_DIR=\"${LIBDIR}\" -DBIN_DIR=\"${BINDIR}\" -DTCL_DIR=\"${TCLDIR}\" -DUSE_TCL_STUBS -DUSE_TK_STUBS -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DMAGIC_VERSION=\"8.2\" -DMAGIC_REVISION=\"101\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHAVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1 -DGCORE=\"/bin/gcore\"
DFLAGS += -DSHDLIB_EXT=\".so\" -DNDEBUG
DFLAGS_NOSTUB = -DCAD_DIR=\"${LIBDIR}\" -DBIN_DIR=\"${BINDIR}\" -DTCL_DIR=\"${TCLDIR}\" -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DMAGIC_VERSION=\"8.2\" -DMAGIC_REVISION=\"53\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHAVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1 -DGCORE=\"/bin/gcore\"
DFLAGS_NOSTUB = -DCAD_DIR=\"${LIBDIR}\" -DBIN_DIR=\"${BINDIR}\" -DTCL_DIR=\"${TCLDIR}\" -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DMAGIC_VERSION=\"8.2\" -DMAGIC_REVISION=\"101\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DSTDC_HEADERS=1 -DHAVE_SETENV=1 -DHAVE_PUTENV=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_DIRENT_H=1 -DHAVE_LIMITS_H=1 -DHAVE_PATHS_H=1 -DHAVE_VA_COPY=1 -DHAVE___VA_COPY=1 -DFILE_LOCKS=1 -DCALMA_MODULE=1 -DCIF_MODULE=1 -DPLOT_MODULE=1 -DLEF_MODULE=1 -DROUTE_MODULE=1 -DUSE_NEW_MACROS=1 -DHAVE_LIBGL=1 -DHAVE_LIBGLU=1 -DVECTOR_FONTS=1 -DHAVE_LIBCAIRO=1 -DMAGIC_WRAPPER=1 -DTHREE_D=1 -Dlinux=1 -DSYSV=1 -DISC=1 -DGCORE=\"/bin/gcore\"
DFLAGS_NOSTUB += -DSHDLIB_EXT=\".so\" -DNDEBUG
CFLAGS = -g -m64 -fPIC -Wimplicit-int -fPIC

View File

@ -1,28 +1,42 @@
selCreate.o: selCreate.c ../utils/magic.h ../utils/malloc.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/undo.h ../commands/commands.h ../select/selInt.h \
../select/select.h ../drc/drc.h ../utils/main.h ../utils/signals.h
selDisplay.o: selDisplay.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h \
../windows/windows.h ../graphics/graphics.h ../dbwind/dbwind.h \
../utils/styles.h ../textio/textio.h ../utils/signals.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../graphics/graphics.h \
../dbwind/dbwind.h ../utils/styles.h ../textio/textio.h \
../utils/signals.h
selEnum.o: selEnum.c ../utils/magic.h ../utils/geometry.h \
../database/database.h ../tiles/tile.h ../utils/hash.h \
../windows/windows.h ../utils/main.h ../select/select.h \
../select/selInt.h ../utils/malloc.h ../textio/textio.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h \
../select/select.h ../select/selInt.h ../utils/malloc.h \
../textio/textio.h
selOps.o: selOps.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/main.h ../select/select.h ../select/selInt.h \
../textio/textio.h ../utils/undo.h ../plow/plow.h ../utils/malloc.h \
../drc/drc.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/main.h \
../select/select.h ../select/selInt.h ../textio/textio.h ../utils/undo.h \
../plow/plow.h ../utils/malloc.h ../drc/drc.h
selUndo.o: selUndo.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../windows/windows.h \
../graphics/graphics.h ../dbwind/dbwind.h ../utils/undo.h \
../commands/commands.h ../textio/textio.h ../select/select.h \
../select/selInt.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../graphics/graphics.h ../dbwind/dbwind.h \
../utils/undo.h ../commands/commands.h ../textio/textio.h \
../select/select.h ../select/selInt.h
selUnselect.o: selUnselect.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../commands/commands.h ../utils/main.h ../select/select.h \
../select/selInt.h ../utils/malloc.h ../textio/textio.h

View File

@ -1232,8 +1232,8 @@ selACPaintFunc2(tile, selACarg)
Rect rrect, orect;
int np, i, j;
ttype = (selACarg->ttype & TT_SIDE) ? ((ttype & TT_RIGHTMASK) >> 14) :
ttype & TT_LEFTMASK;
ttype = (selACarg->ttype & TT_SIDE) ? ((selACarg->ttype & TT_RIGHTMASK) >> 14) :
selACarg->ttype & TT_LEFTMASK;
if (type & TT_DIAGONAL)
rtype = (type & TT_SIDE) ? SplitRightType(tile) :

View File

@ -1,19 +1,25 @@
SimDBstuff.o: SimDBstuff.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../database/databaseInt.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../database/databaseInt.h ../textio/textio.h \
../utils/signals.h ../utils/malloc.h ../extract/extractInt.h \
../extract/extDebugInt.h ../sim/sim.h ../windows/windows.h \
../dbwind/dbwind.h ../commands/commands.h ../textio/txcommands.h \
../utils/styles.h ../graphics/graphics.h
SimSelect.o: SimSelect.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../dbwind/dbwind.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../dbwind/dbwind.h \
../utils/undo.h ../commands/commands.h ../select/selInt.h \
../utils/main.h ../utils/malloc.h ../utils/signals.h ../sim/sim.h
SimRsim.o: SimRsim.c
SimExtract.o: SimExtract.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/geometry.h ../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h ../utils/malloc.h ../textio/textio.h \
../debug/debug.h ../extract/extract.h ../extract/extractInt.h \
../extract/extDebugInt.h ../utils/signals.h ../windows/windows.h \
../dbwind/dbwind.h ../utils/styles.h ../utils/stack.h ../sim/sim.h

View File

@ -1,6 +1,8 @@
tclmagic.o: tclmagic.c ../tcltk/tclmagic.h ../utils/main.h \
../windows/windows.h ../utils/magic.h ../utils/geometry.h \
../database/database.h ../tiles/tile.h ../utils/hash.h ../utils/dqueue.h \
../commands/commands.h ../utils/utils.h ../textio/textio.h \
../textio/txcommands.h ../utils/signals.h ../graphics/graphics.h \
../utils/malloc.h ../dbwind/dbwind.h
../database/database.h ../tiles/tile.h ../utils/hash.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/dqueue.h ../commands/commands.h \
../textio/textio.h ../textio/txcommands.h ../utils/signals.h \
../graphics/graphics.h ../utils/malloc.h ../dbwind/dbwind.h

View File

@ -655,11 +655,11 @@ proc magic::tool {{type next}} {
macro Button1 "magic::trackwire %W pick"
macro Button2 "magic::trackwire %W done"
macro Button3 "magic::trackwire %W cancel"
macro Shift_Button1 "wire incr type"
macro Shift_Button1 "wire incr type ; wire show"
macro Shift_Button2 "wire switch"
macro Shift_Button3 "wire decr type"
macro Button4 "wire incr width"
macro Button5 "wire decr width"
macro Shift_Button3 "wire decr type ; wire show"
macro Button4 "wire incr width ; wire show"
macro Button5 "wire decr width ; wire show"
}
netlist {

View File

@ -1,20 +1,27 @@
txCommands.o: txCommands.c ../utils/magsgtty.h ../utils/magic.h \
../textio/textio.h ../utils/geometry.h ../textio/txcommands.h \
../textio/textioInt.h ../utils/macros.h ../utils/hash.h \
../windows/windows.h ../tiles/tile.h ../database/database.h \
../dbwind/dbwind.h ../drc/drc.h ../utils/signals.h \
txCommands.o: txCommands.c ../tcltk/tclmagic.h ../utils/magsgtty.h \
../utils/magic.h ../textio/textio.h ../utils/geometry.h \
../textio/txcommands.h ../textio/textioInt.h ../utils/macros.h \
../utils/hash.h ../windows/windows.h ../tiles/tile.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../dbwind/dbwind.h ../drc/drc.h ../utils/signals.h \
../graphics/graphics.h ../utils/dqueue.h ../utils/malloc.h \
../utils/utils.h ../lisp/lisp.h
../lisp/lisp.h
txInput.o: txInput.c ../utils/magsgtty.h ../utils/magic.h ../utils/main.h \
../windows/windows.h ../utils/geometry.h ../database/database.h \
../tiles/tile.h ../utils/hash.h ../textio/textio.h \
../textio/txcommands.h ../textio/textioInt.h ../utils/dqueue.h \
../utils/macros.h ../graphics/graphics.h ../database/databaseInt.h \
../cif/CIFint.h ../cif/CIFread.h
../tiles/tile.h ../utils/hash.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../textio/textio.h ../textio/txcommands.h \
../textio/textioInt.h ../utils/dqueue.h ../utils/macros.h \
../graphics/graphics.h ../database/databaseInt.h ../cif/CIFint.h \
../cif/CIFread.h
txMain.o: txMain.c ../utils/magsgtty.h ../utils/magic.h \
../textio/textio.h ../utils/geometry.h ../textio/txcommands.h \
../textio/textioInt.h ../windows/windows.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../dbwind/dbwind.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../dbwind/dbwind.h
txMore.o: txMore.c ../utils/magic.h
txOutput.o: txOutput.c ../utils/magsgtty.h ../utils/magic.h \
../textio/textio.h ../utils/geometry.h ../textio/txcommands.h \

View File

@ -1,5 +1,3 @@
tile.o: tile.c ../utils/magic.h ../utils/malloc.h ../utils/geometry.h \
../tiles/tile.h
search.o: search.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h
search2.o: search2.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/signals.h

View File

@ -3,8 +3,10 @@ child.o: child.c ../utils/utils.h ../utils/magic.h ../utils/malloc.h
dqueue.o: dqueue.c ../utils/magic.h ../utils/dqueue.h ../utils/malloc.h
finddisp.o: finddisp.c ../utils/magic.h ../utils/utils.h
flock.o: flock.c ../utils/magic.h ../utils/hash.h ../utils/geometry.h \
../tiles/tile.h ../database/database.h ../windows/windows.h \
../utils/malloc.h
../tiles/tile.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../windows/windows.h ../utils/malloc.h
flsbuf.o: flsbuf.c
fraction.o: fraction.c ../utils/magic.h ../utils/geometry.h
geometry.o: geometry.c ../utils/magic.h ../utils/geometry.h \
@ -13,36 +15,48 @@ getrect.o: getrect.c ../utils/magic.h ../utils/geometry.h
hash.o: hash.c ../utils/magic.h ../utils/hash.h ../utils/malloc.h
heap.o: heap.c ../utils/magic.h ../utils/geometry.h ../utils/heap.h \
../utils/utils.h ../utils/malloc.h
ihash.o: ihash.c ../utils/magic.h ../utils/malloc.h ../utils/utils.h \
../utils/ihash.h
list.o: list.c ../utils/magic.h ../utils/utils.h ../utils/malloc.h \
../utils/list.h
lookup.o: lookup.c ../utils/magic.h ../utils/utils.h
lookupany.o: lookupany.c
lookupfull.o: lookupfull.c ../utils/magic.h
macros.o: macros.c ../utils/magic.h ../utils/utils.h ../utils/hash.h \
../utils/malloc.h ../utils/macros.h ../windows/windows.h \
../utils/geometry.h
main.o: main.c ../utils/main.h ../windows/windows.h ../utils/magic.h \
macros.o: macros.c ../utils/magic.h ../utils/main.h ../windows/windows.h \
../utils/geometry.h ../database/database.h ../tiles/tile.h \
../utils/hash.h ../utils/malloc.h ../utils/magsgtty.h ../utils/macros.h \
../textio/textio.h ../textio/txcommands.h ../utils/tech.h ../drc/drc.h \
../graphics/graphics.h ../dbwind/dbwind.h ../commands/commands.h \
../utils/signals.h ../utils/utils.h ../utils/runstats.h ../cif/cif.h \
../router/router.h ../lef/lef.h ../extract/extract.h ../utils/undo.h \
../netmenu/netmenu.h ../plow/plow.h ../utils/paths.h ../wiring/wiring.h \
../plot/plot.h ../sim/sim.h ../utils/list.h ../mzrouter/mzrouter.h \
../lisp/lisp.h ../graphics/wind3d.h
../utils/hash.h ../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../utils/macros.h
main.o: main.c ../tcltk/tclmagic.h ../utils/main.h ../windows/windows.h \
../utils/magic.h ../utils/geometry.h ../database/database.h \
../tiles/tile.h ../utils/hash.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h ../utils/magsgtty.h \
../utils/macros.h ../textio/textio.h ../textio/txcommands.h \
../utils/tech.h ../drc/drc.h ../graphics/graphics.h ../dbwind/dbwind.h \
../commands/commands.h ../utils/signals.h ../utils/runstats.h \
../cif/cif.h ../router/router.h ../lef/lef.h ../extract/extract.h \
../utils/undo.h ../netmenu/netmenu.h ../plow/plow.h ../utils/paths.h \
../wiring/wiring.h ../plot/plot.h ../sim/sim.h ../utils/list.h \
../mzrouter/mzrouter.h ../lisp/lisp.h ../graphics/wind3d.h
malloc.o: malloc.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/malloc.h
match.o: match.c ../utils/magic.h ../textio/textio.h
maxrect.o: maxrect.c ../utils/maxrect.h ../database/database.h \
../tiles/tile.h ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../utils/malloc.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/malloc.h
netlist.o: netlist.c ../utils/magic.h ../utils/geometry.h ../utils/hash.h \
../utils/heap.h ../tiles/tile.h ../database/database.h \
../utils/netlist.h ../utils/signals.h ../textio/textio.h \
../utils/malloc.h ../utils/styles.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/netlist.h ../utils/signals.h \
../textio/textio.h ../utils/malloc.h ../utils/styles.h
niceabort.o: niceabort.c ../utils/magic.h ../textio/textio.h \
../utils/utils.h ../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../windows/windows.h ../utils/main.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../windows/windows.h ../utils/main.h
parser.o: parser.c ../utils/magic.h ../textio/textio.h
path.o: path.c ../tcltk/tclmagic.h ../utils/magic.h ../utils/hash.h \
../utils/malloc.h ../utils/utils.h
@ -52,22 +66,34 @@ port.o: port.c ../utils/magic.h ../utils/hash.h ../utils/malloc.h
printstuff.o: printstuff.c ../utils/magic.h ../utils/geometry.h
signals.o: signals.c ../utils/main.h ../windows/windows.h \
../utils/magic.h ../utils/geometry.h ../database/database.h \
../tiles/tile.h ../utils/hash.h ../utils/magsgtty.h ../textio/textio.h \
../tiles/tile.h ../utils/hash.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/magsgtty.h ../textio/textio.h \
../utils/signals.h ../graphics/graphics.h
stack.o: stack.c ../utils/magic.h ../utils/utils.h ../utils/stack.h \
../utils/malloc.h
strdup.o: strdup.c ../utils/magic.h ../utils/malloc.h
runstats.o: runstats.c ../utils/magic.h ../utils/runstats.h
set.o: set.c ../utils/magic.h ../utils/utils.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/list.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../utils/list.h
show.o: show.c ../utils/magic.h ../utils/geometry.h ../windows/windows.h \
../graphics/graphics.h ../utils/hash.h ../tiles/tile.h \
../database/database.h ../dbwind/dbwind.h
tech.o: tech.c ../utils/magic.h ../utils/geometry.h ../utils/utils.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../dbwind/dbwind.h
tech.o: tech.c ../database/database.h ../tiles/tile.h ../utils/magic.h \
../utils/geometry.h ../utils/hash.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../utils/tech.h ../textio/textio.h ../windows/windows.h \
../utils/malloc.h
touchtypes.o: touchtypes.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h \
../database/database.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h \
../bplane/bplaneInt.h
undo.o: undo.c ../utils/magic.h ../utils/utils.h ../utils/malloc.h \
../utils/undo.h

View File

@ -1,27 +1,35 @@
windClient.o: windClient.c ../utils/magic.h ../textio/textio.h \
../utils/geometry.h ../windows/windows.h ../graphics/glyphs.h \
../windows/windInt.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/main.h ../utils/macros.h \
../utils/utils.h ../utils/malloc.h ../graphics/graphics.h \
../utils/styles.h ../textio/txcommands.h ../utils/undo.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/main.h ../utils/macros.h \
../utils/malloc.h ../graphics/graphics.h ../utils/styles.h \
../textio/txcommands.h ../utils/undo.h
windCmdAM.o: windCmdAM.c ../tcltk/tclmagic.h ../utils/magic.h \
../textio/textio.h ../utils/geometry.h ../windows/windows.h \
../utils/malloc.h ../utils/runstats.h ../utils/macros.h ../utils/hash.h \
../utils/signals.h ../graphics/graphics.h ../utils/styles.h \
../textio/txcommands.h ../graphics/glyphs.h ../windows/windInt.h \
../tiles/tile.h ../database/database.h ../dbwind/dbwind.h \
../utils/utils.h
../tiles/tile.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../dbwind/dbwind.h ../cif/cif.h
windCmdNR.o: windCmdNR.c ../utils/magic.h ../textio/textio.h \
../utils/geometry.h ../windows/windows.h ../graphics/glyphs.h \
../windows/windInt.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/main.h ../utils/tech.h \
../utils/runstats.h ../utils/undo.h ../utils/utils.h \
../graphics/graphics.h ../textio/txcommands.h ../dbwind/dbwind.h
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/main.h ../utils/tech.h \
../utils/runstats.h ../utils/undo.h ../graphics/graphics.h \
../textio/txcommands.h ../dbwind/dbwind.h
windCmdSZ.o: windCmdSZ.c ../tcltk/tclmagic.h ../utils/magic.h \
../textio/textio.h ../utils/geometry.h ../tiles/tile.h \
../windows/windows.h ../graphics/glyphs.h ../windows/windInt.h \
../utils/undo.h ../utils/utils.h ../utils/signals.h \
../textio/txcommands.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/geofast.h ../bplane/bplaneInt.h \
../dbwind/dbwind.h ../graphics/graphics.h
windSend.o: windSend.c ../tcltk/tclmagic.h ../utils/magic.h \
../textio/textio.h ../utils/geometry.h ../windows/windows.h \
@ -34,17 +42,24 @@ windDisp.o: windDisp.c ../tcltk/tclmagic.h ../utils/magic.h \
../utils/utils.h ../textio/textio.h ../utils/geometry.h \
../graphics/glyphs.h ../windows/windows.h ../windows/windInt.h \
../graphics/graphics.h ../utils/styles.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/undo.h ../utils/signals.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/undo.h ../utils/signals.h \
../utils/malloc.h
windMain.o: windMain.c ../utils/magic.h ../utils/geometry.h \
../graphics/glyphs.h ../windows/windows.h ../windows/windInt.h \
../utils/stack.h ../tiles/tile.h ../utils/hash.h ../database/database.h \
../textio/textio.h ../graphics/graphics.h ../utils/malloc.h \
../utils/utils.h ../textio/txcommands.h
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../textio/textio.h ../graphics/graphics.h \
../utils/malloc.h ../textio/txcommands.h
windMove.o: windMove.c ../utils/magic.h ../textio/textio.h \
../utils/geometry.h ../windows/windows.h ../graphics/graphics.h \
../graphics/glyphs.h ../windows/windInt.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../utils/malloc.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../utils/malloc.h
windSearch.o: windSearch.c ../utils/magic.h ../utils/geometry.h \
../windows/windows.h ../graphics/glyphs.h ../windows/windInt.h
windTrans.o: windTrans.c ../utils/magic.h ../utils/geometry.h \

View File

@ -1,13 +1,19 @@
wireOps.o: wireOps.c ../utils/magic.h ../utils/geometry.h ../tiles/tile.h \
../utils/hash.h ../database/database.h ../select/select.h \
../textio/textio.h ../windows/windows.h ../dbwind/dbwind.h ../drc/drc.h \
../utils/main.h ../wiring/wiring.h ../wiring/wireInt.h \
../textio/txcommands.h ../utils/styles.h
../utils/hash.h ../database/database.h ../bplane/bplane.h \
../bplane/bpOpaque.h ../utils/ihash.h ../bplane/bpEnum.h \
../utils/utils.h ../utils/geofast.h ../bplane/bplaneInt.h \
../select/select.h ../textio/textio.h ../windows/windows.h \
../dbwind/dbwind.h ../drc/drc.h ../utils/main.h ../wiring/wiring.h \
../wiring/wireInt.h ../textio/txcommands.h ../utils/styles.h
wireTech.o: wireTech.c ../utils/magic.h ../utils/utils.h \
../utils/geometry.h ../tiles/tile.h ../utils/hash.h \
../database/database.h ../utils/tech.h ../wiring/wiring.h \
../database/database.h ../bplane/bplane.h ../bplane/bpOpaque.h \
../utils/ihash.h ../bplane/bpEnum.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/tech.h ../wiring/wiring.h \
../utils/malloc.h
wireUndo.o: wireUndo.c ../utils/magic.h ../utils/geometry.h \
../tiles/tile.h ../utils/hash.h ../database/database.h ../utils/tech.h \
../wiring/wiring.h ../wiring/wireInt.h ../textio/textio.h \
../utils/undo.h
../tiles/tile.h ../utils/hash.h ../database/database.h \
../bplane/bplane.h ../bplane/bpOpaque.h ../utils/ihash.h \
../bplane/bpEnum.h ../utils/utils.h ../utils/geofast.h \
../bplane/bplaneInt.h ../utils/tech.h ../wiring/wiring.h \
../wiring/wireInt.h ../textio/textio.h ../utils/undo.h

View File

@ -30,6 +30,7 @@
extern TileType WireType;
extern int WireWidth;
extern int WireLastDir;
extern int WireUnits;
/* Undo procedure: */

View File

@ -301,6 +301,7 @@ WireAddLeg(rect, point, direction)
SearchContext scx;
Point cursorPos;
TileTypeBitMask mask;
int hwidth = WireWidth / 2;
if (WireType == 0)
{
@ -372,20 +373,34 @@ WireAddLeg(rect, point, direction)
if (direction == WIRE_HORIZONTAL)
{
/* If the rect height is not the same as WireWidth, then center */
/* the new wire segment on the rect. */
if (rect->r_ytop - rect->r_ybot != WireWidth)
{
int rmid = (rect->r_ytop + rect->r_ybot) / 2;
rect->r_ybot = rmid - hwidth;
rect->r_ytop = rect->r_ybot + WireWidth;
rmid = (rect->r_xtop + rect->r_xbot) / 2;
rect->r_xbot = rmid - hwidth;
rect->r_xtop = rect->r_xbot + WireWidth;
}
/* The new leg will be horizontal. First compute its span in
* x, then its span in y.
*/
if (point->p_x > rect->r_xtop)
{
new.r_xbot = rect->r_xtop;
new.r_xtop = point->p_x;
new.r_xbot = rect->r_xbot;
new.r_xtop = point->p_x + hwidth;
WireLastDir = GEO_EAST;
}
else if (point->p_x < rect->r_xbot)
{
new.r_xtop = rect->r_xbot;
new.r_xbot = point->p_x;
new.r_xtop = rect->r_xtop;
new.r_xbot = point->p_x - hwidth;
WireLastDir = GEO_WEST;
}
else return; /* Nothing to paint! */
@ -395,7 +410,7 @@ WireAddLeg(rect, point, direction)
* the wires so there's no real choice.
*/
new.r_ybot = point->p_y - WireWidth/2;
new.r_ybot = point->p_y - hwidth;
if (new.r_ybot < rect->r_ybot)
new.r_ybot = rect->r_ybot;
else if (new.r_ybot > rect->r_ytop - WireWidth)
@ -404,20 +419,34 @@ WireAddLeg(rect, point, direction)
}
else
{
/* If the rect width is not the same as WireWidth, then center */
/* the new wire segment on the rect. */
if (rect->r_xtop - rect->r_xbot != WireWidth)
{
int rmid = (rect->r_xtop + rect->r_xbot) / 2;
rect->r_xbot = rmid - hwidth;
rect->r_xtop = rect->r_xbot + WireWidth;
rmid = (rect->r_ytop + rect->r_ybot) / 2;
rect->r_ybot = rmid - hwidth;
rect->r_ytop = rect->r_ybot + WireWidth;
}
/* The new wire segment is vertical. See comments above (this
* code is just like what's up there).
*/
if (point->p_y > rect->r_ytop)
{
new.r_ybot = rect->r_ytop;
new.r_ytop = point->p_y;
new.r_ybot = rect->r_ybot;
new.r_ytop = point->p_y + hwidth;
WireLastDir = GEO_NORTH;
}
else if (point->p_y < rect->r_ybot)
{
new.r_ytop = rect->r_ybot;
new.r_ybot = point->p_y;
new.r_ytop = rect->r_ytop;
new.r_ybot = point->p_y - hwidth;
WireLastDir = GEO_SOUTH;
}
else return; /* Nothing to paint! */
@ -453,7 +482,7 @@ WireAddLeg(rect, point, direction)
SelectChunk(&scx, WireType, 0, &leg, FALSE);
}
/* Make the box a square at the tip of the new are just painted. */
/* Make the box a square at the tip of the new area just painted. */
switch (WireLastDir)
{
@ -517,6 +546,7 @@ WireShowLeg()
int direction = WIRE_CHOOSE;
int delx, dely;
MagWindow *w;
int hwidth = WireWidth / 2;
if (WireType == 0) return;
@ -557,20 +587,32 @@ WireShowLeg()
if (direction == WIRE_HORIZONTAL)
{
/* Correct for different width between wire and rect. */
if (rect->r_ytop - rect->r_ybot != WireWidth)
{
int rmid = (rect->r_ytop + rect->r_ybot) / 2;
rect->r_ybot = rmid - hwidth;
rect->r_ytop = rect->r_ybot + WireWidth;
rmid = (rect->r_xtop + rect->r_xbot) / 2;
rect->r_xbot = rmid - hwidth;
rect->r_xtop = rect->r_xbot + WireWidth;
}
/* The new leg will be horizontal. First compute its span in
* x, then its span in y.
*/
if (point->p_x > rect->r_xtop)
{
new.r_xbot = rect->r_xtop;
new.r_xtop = point->p_x;
new.r_xbot = rect->r_xbot;
new.r_xtop = point->p_x + hwidth;
WireLastDir = GEO_EAST;
}
else if (point->p_x < rect->r_xbot)
{
new.r_xtop = rect->r_xbot;
new.r_xbot = point->p_x;
new.r_xtop = rect->r_xtop;
new.r_xbot = point->p_x - hwidth;
WireLastDir = GEO_WEST;
}
else return; /* Nothing to paint! */
@ -580,7 +622,7 @@ WireShowLeg()
* the wires so there's no real choice.
*/
new.r_ybot = point->p_y - WireWidth/2;
new.r_ybot = point->p_y - hwidth;
if (new.r_ybot < rect->r_ybot)
new.r_ybot = rect->r_ybot;
else if (new.r_ybot > rect->r_ytop - WireWidth)
@ -589,25 +631,37 @@ WireShowLeg()
}
else
{
/* Correct for different width between wire and rect. */
if (rect->r_xtop - rect->r_xbot != WireWidth)
{
int rmid = (rect->r_xtop + rect->r_xbot) / 2;
rect->r_xbot = rmid - hwidth;
rect->r_xtop = rect->r_xbot + WireWidth;
rmid = (rect->r_ytop + rect->r_ybot) / 2;
rect->r_ybot = rmid - hwidth;
rect->r_ytop = rect->r_ybot + WireWidth;
}
/* The new wire segment is vertical. See comments above (this
* code is just like what's up there).
*/
if (point->p_y > rect->r_ytop)
{
new.r_ybot = rect->r_ytop;
new.r_ytop = point->p_y;
new.r_ybot = rect->r_ybot;
new.r_ytop = point->p_y + hwidth;
WireLastDir = GEO_NORTH;
}
else if (point->p_y < rect->r_ybot)
{
new.r_ytop = rect->r_ybot;
new.r_ybot = point->p_y;
new.r_ytop = rect->r_ytop;
new.r_ybot = point->p_y - hwidth;
WireLastDir = GEO_SOUTH;
}
else return; /* Nothing to paint! */
new.r_xbot = point->p_x - WireWidth/2;
new.r_xbot = point->p_x - hwidth;
if (new.r_xbot < rect->r_xbot)
new.r_xbot = rect->r_xbot;
if (new.r_xbot > rect->r_xtop - WireWidth)
@ -652,6 +706,9 @@ WireShowLeg()
* ----------------------------------------------------------------------------
*/
#define WIRING_CONTACT_UP 1
#define WIRING_CONTACT_DOWN 0
void
WireAddContact(newType, newWidth)
TileType newType; /* New type of material to use for wiring.
@ -669,7 +726,9 @@ WireAddContact(newType, newWidth)
CellDef *boxRootDef;
TileType oldType;
TileTypeBitMask mask, allmask;
int oldOverlap, newOverlap, i, totalSize, oldDir;
int conSurround1, conSurround2, conExtend1, conExtend2, conSize;
int oldOverlap, newOverlap;
int i, totalSize, oldDir, updown;
Contact *contact;
SearchContext scx;
@ -713,19 +772,43 @@ WireAddContact(newType, newWidth)
if ((contact->con_layer1 == oldType) &&
(contact->con_layer2 == WireType))
{
oldOverlap = contact->con_surround1;
newOverlap = contact->con_surround2;
conSurround1 = contact->con_surround1 / WireUnits;
if ((contact->con_surround1 % WireUnits) != 0) conSurround1++;
conSurround2 = contact->con_surround2 / WireUnits;
if ((contact->con_surround2 % WireUnits) != 0) conSurround2++;
conExtend1 = contact->con_extend1 / WireUnits;
if ((contact->con_extend1 % WireUnits) != 0) conExtend1++;
conExtend2 = contact->con_extend2 / WireUnits;
if ((contact->con_extend2 % WireUnits) != 0) conExtend2++;
conSize = contact->con_size / WireUnits;
if ((contact->con_size % WireUnits) != 0) conSize++;
oldOverlap = conSurround1;
newOverlap = conSurround2;
updown = WIRING_CONTACT_UP;
goto gotContact;
}
if ((contact->con_layer2 == oldType) &&
(contact->con_layer1 == WireType))
{
oldOverlap = contact->con_surround2;
newOverlap = contact->con_surround1;
conSurround1 = contact->con_surround1 / WireUnits;
if ((contact->con_surround1 % WireUnits) != 0) conSurround1++;
conSurround2 = contact->con_surround2 / WireUnits;
if ((contact->con_surround2 % WireUnits) != 0) conSurround2++;
conExtend1 = contact->con_extend1 / WireUnits;
if ((contact->con_extend1 % WireUnits) != 0) conExtend1++;
conExtend2 = contact->con_extend2 / WireUnits;
if ((contact->con_extend2 % WireUnits) != 0) conExtend2++;
conSize = contact->con_size / WireUnits;
if ((contact->con_size % WireUnits) != 0) conSize++;
oldOverlap = conSurround2;
newOverlap = conSurround1;
updown = WIRING_CONTACT_DOWN;
goto gotContact;
}
}
TxError("Sorry, but the technology file doesn't define a contact\n");
TxError("The technology file doesn't define a contact\n");
TxError(" between \"%s\" and \"%s\".\n", DBTypeLongName(oldType),
DBTypeLongName(WireType));
return;
@ -739,18 +822,19 @@ WireAddContact(newType, newWidth)
*/
gotContact:
totalSize = contact->con_size + 2*oldOverlap;
totalSize = conSize + 2 * oldOverlap;
if (totalSize < WireWidth) totalSize = WireWidth;
contactArea = oldLeg;
if ((contactArea.r_xtop - contactArea.r_xbot) < totalSize)
{
contactArea.r_xbot -= (totalSize - (contactArea.r_xtop
- contactArea.r_xbot))/2;
- contactArea.r_xbot)) / 2;
contactArea.r_xtop = contactArea.r_xbot + totalSize;
}
if ((contactArea.r_ytop - contactArea.r_ybot) < totalSize)
{
contactArea.r_ybot -= (totalSize - (contactArea.r_ytop
- contactArea.r_ybot))/2;
- contactArea.r_ybot)) / 2;
contactArea.r_ytop = contactArea.r_ybot + totalSize;
}
@ -785,19 +869,105 @@ WireAddContact(newType, newWidth)
TTMaskSetOnlyType(&mask, contact->con_type);
TTMaskSetOnlyType(&allmask, contact->con_type);
DBPaintValid(EditCellUse->cu_def, &tmp, &mask, 0);
if (contact->con_surround1 != 0)
if (conSurround1 != 0)
{
TTMaskSetOnlyType(&mask, contact->con_layer1);
TTMaskSetType(&allmask, contact->con_layer1);
GEO_EXPAND(&tmp, contact->con_surround1, &tmp2);
GEO_EXPAND(&tmp, conSurround1, &tmp2);
(void) GeoInclude(&tmp2, &editArea);
DBPaintValid(EditCellUse->cu_def, &tmp2, &mask, 0);
}
if (contact->con_surround2 != 0)
if (conSurround2 != 0)
{
TTMaskSetOnlyType(&mask, contact->con_layer2);
TTMaskSetType(&allmask, contact->con_layer2);
GEO_EXPAND(&tmp, contact->con_surround2, &tmp2);
GEO_EXPAND(&tmp, conSurround2, &tmp2);
(void) GeoInclude(&tmp2, &editArea);
DBPaintValid(EditCellUse->cu_def, &tmp2, &mask, 0);
}
if (conExtend1 != 0)
{
TTMaskSetOnlyType(&mask, contact->con_layer1);
TTMaskSetType(&allmask, contact->con_layer1);
tmp2 = tmp;
switch(oldDir)
{
case GEO_NORTH:
case GEO_SOUTH:
if (updown == WIRING_CONTACT_UP)
{
tmp2.r_ybot -= conExtend1;
tmp2.r_ytop += conExtend1;
tmp2.r_xbot -= conSurround1;
tmp2.r_xtop += conSurround1;
}
else {
tmp2.r_xbot -= conExtend1;
tmp2.r_xtop += conExtend1;
tmp2.r_ybot -= conSurround1;
tmp2.r_ytop += conSurround1;
}
break;
case GEO_EAST:
case GEO_WEST:
if (updown == WIRING_CONTACT_UP)
{
tmp2.r_xbot -= conExtend1;
tmp2.r_xtop += conExtend1;
tmp2.r_ybot -= conSurround1;
tmp2.r_ytop += conSurround1;
}
else {
tmp2.r_ybot -= conExtend1;
tmp2.r_ytop += conExtend1;
tmp2.r_xbot -= conSurround1;
tmp2.r_xtop += conSurround1;
}
break;
}
(void) GeoInclude(&tmp2, &editArea);
DBPaintValid(EditCellUse->cu_def, &tmp2, &mask, 0);
}
if (conExtend2 != 0)
{
TTMaskSetOnlyType(&mask, contact->con_layer2);
TTMaskSetType(&allmask, contact->con_layer2);
tmp2 = tmp;
switch(oldDir)
{
case GEO_NORTH:
case GEO_SOUTH:
if (updown == WIRING_CONTACT_UP)
{
tmp2.r_xbot -= conExtend2;
tmp2.r_xtop += conExtend2;
tmp2.r_ybot -= conSurround2;
tmp2.r_ytop += conSurround2;
}
else {
tmp2.r_ybot -= conExtend2;
tmp2.r_ytop += conExtend2;
tmp2.r_xbot -= conSurround2;
tmp2.r_xtop += conSurround2;
}
break;
case GEO_EAST:
case GEO_WEST:
if (updown == WIRING_CONTACT_UP)
{
tmp2.r_ybot -= conExtend2;
tmp2.r_ytop += conExtend2;
tmp2.r_xbot -= conSurround2;
tmp2.r_xtop += conSurround2;
}
else {
tmp2.r_xbot -= conExtend2;
tmp2.r_xtop += conExtend2;
tmp2.r_ybot -= conSurround2;
tmp2.r_ytop += conSurround2;
}
break;
}
(void) GeoInclude(&tmp2, &editArea);
DBPaintValid(EditCellUse->cu_def, &tmp2, &mask, 0);
}
@ -820,15 +990,15 @@ WireAddContact(newType, newWidth)
scx.scx_area = tmp;
TTMaskSetOnlyType(&mask, contact->con_type);
SelectArea(&scx, &mask, 0);
if (contact->con_surround1 != 0)
if (conSurround1 != 0)
{
GEO_EXPAND(&tmp, contact->con_surround1, &scx.scx_area);
GEO_EXPAND(&tmp, conSurround1, &scx.scx_area);
TTMaskSetOnlyType(&mask, contact->con_layer1);
SelectArea(&scx, &mask, 0);
}
if (contact->con_surround2 != 0)
if (conSurround2 != 0)
{
GEO_EXPAND(&tmp, contact->con_surround2, &scx.scx_area);
GEO_EXPAND(&tmp, conSurround2, &scx.scx_area);
TTMaskSetOnlyType(&mask, contact->con_layer2);
SelectArea(&scx, &mask, 0);
}

View File

@ -37,6 +37,7 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
/* Linked list to store contact information collected by this module: */
Contact *WireContacts;
int WireUnits; // Units per lambda for wiring sizes
/*
@ -65,6 +66,7 @@ WireTechInit()
freeMagic((char *) WireContacts);
WireContacts = WireContacts->con_next;
}
WireUnits = 1;
}
/*
@ -91,22 +93,41 @@ WireTechLine(sectionName, argc, argv)
char *argv[]; /* Pointers to fields of line. */
{
Contact *new;
int hasExtend = 0;
if (!strcmp(argv[0], "scalefactor"))
{
if (argc != 2)
{
TechError("\"scalefactor\" line must have exactly 2 arguments.\n");
return TRUE;
}
if (!StrIsInt(argv[1]))
{
TechError("\"scalefactor\" argument must be an integer.\n");
return TRUE;
}
WireUnits = atoi(argv[1]);
return TRUE;
}
if (strcmp(argv[0], "contact") != 0)
{
TechError("Unknown wiring keyword: %s. Line ignored.\n", argv[0]);
return TRUE;
}
if (argc != 7)
if ((argc != 7) && (argc != 9))
{
TechError("\"contact\" lines must have exactly 7 arguments.\n");
TechError("\"contact\" lines must have exactly 7 or 9 arguments.\n");
return TRUE;
}
if (argc == 9) hasExtend = 1;
new = (Contact *) mallocMagic(sizeof(Contact));
new->con_type = DBTechNoisyNameType(argv[1]);
new->con_layer1 = DBTechNoisyNameType(argv[3]);
new->con_layer2 = DBTechNoisyNameType(argv[5]);
new->con_layer2 = DBTechNoisyNameType(argv[5 + hasExtend]);
new->con_extend1 = new->con_extend2 = 0;
if ((new->con_type < 0) || (new->con_layer1 < 0) || (new->con_layer2 < 0))
{
errorReturn:
@ -116,22 +137,38 @@ WireTechLine(sectionName, argc, argv)
if (!StrIsInt(argv[2]))
{
TechError("3rd field must be an integer.\n");
TechError("Contact size must be an integer.\n");
goto errorReturn;
}
else new->con_size = atoi(argv[2]);
if (!StrIsInt(argv[4]))
{
TechError("5th field must be an integer.\n");
TechError("Contact surround distance must be an integer.\n");
goto errorReturn;
}
else new->con_surround1 = atoi(argv[4]);
if (!StrIsInt(argv[6]))
if (!StrIsInt(argv[6 + hasExtend]))
{
TechError("6th field must be an integer.\n");
TechError("Contact surround distance must be an integer.\n");
goto errorReturn;
}
else new->con_surround2 = atoi(argv[6]);
else new->con_surround2 = atoi(argv[6 + hasExtend]);
if (argc == 9)
{
if (!StrIsInt(argv[5]))
{
TechError("Contact extend distance must be an integer.\n");
goto errorReturn;
}
else new->con_extend1 = atoi(argv[5]);
if (!StrIsInt(argv[8]))
{
TechError("Contact extend distance must be an integer.\n");
goto errorReturn;
}
else new->con_extend2 = atoi(argv[8]);
}
new->con_next = WireContacts;
WireContacts = new;
@ -201,5 +238,11 @@ WireTechScale(scalen, scaled)
con->con_surround2 *= scaled;
con->con_surround2 /= scalen;
con->con_extend1 *= scaled;
con->con_extend1 /= scalen;
con->con_extend2 *= scaled;
con->con_extend2 /= scalen;
}
}

View File

@ -1,204 +0,0 @@
/*
* wireTech.c --
*
* This file contains procedures that parse the wiring sections of
* technology files.
*
* *********************************************************************
* * Copyright (C) 1985, 1990 Regents of the University of California. *
* * Permission to use, copy, modify, and distribute this *
* * software and its documentation for any purpose and without *
* * fee is hereby granted, provided that the above copyright *
* * notice appear in all copies. The University of California *
* * makes no representations about the suitability of this *
* * software for any purpose. It is provided "as is" without *
* * express or implied warranty. Export of this software outside *
* * of the United States of America may require an export license. *
* *********************************************************************
*/
#ifndef lint
static char rcsid[]="$Header: /usr/cvsroot/magic-8.0/wiring/wireTech.c.new,v 1.1.1.1 2008/02/03 20:43:50 tim Exp $";
#endif /* not lint */
#include <stdio.h>
#include <string.h>
#include "utils/magic.h"
#include "utils/geometry.h"
#include "tiles/tile.h"
#include "utils/hash.h"
#include "database/database.h"
#include "tech/tech.h"
#include "wiring/wiring.h"
#include "utils/malloc.h"
/* Linked list to store contact information collected by this module: */
Contact *WireContacts;
/*
* ----------------------------------------------------------------------------
* WireTechInit --
*
* Called once at beginning of technology file read-in to initialize
* data structures.
*
* Results:
* None.
*
* Side effects:
* Clears out the contact table.
* ----------------------------------------------------------------------------
*/
void
WireTechInit()
{
Contact *contact;
int i;
while (WireContacts != NULL)
{
freeMagic((char *) WireContacts);
WireContacts = WireContacts->con_next;
}
}
/*
* ----------------------------------------------------------------------------
* WireTechLine --
*
* This procedure is invoked by the technology module once for
* each line in the "wiring" section of the technology file.
*
* Results:
* Always returns TRUE (otherwise the technology module would
* abort Magic with a fatal error).
*
* Side effects:
* Builds up the contact table, prints error messages if necessary.
* ----------------------------------------------------------------------------
*/
/* ARGSUSED */
bool
WireTechLine(sectionName, argc, argv)
char *sectionName; /* Name of this section (unused). */
int argc; /* Number of arguments on line. */
char *argv[]; /* Pointers to fields of line. */
{
Contact *new;
if (strcmp(argv[0], "contact") != 0)
{
TechError("Unknown wiring keyword: %s. Line ignored.\n", argv[0]);
return TRUE;
}
if (argc != 7)
{
TechError("\"contact\" lines must have exactly 7 arguments.\n");
return TRUE;
}
new = (Contact *) mallocMagic(sizeof(Contact));
new->con_type = DBTechNoisyNameType(argv[1]);
new->con_layer1 = DBTechNoisyNameType(argv[3]);
new->con_layer2 = DBTechNoisyNameType(argv[5]);
if ((new->con_type < 0) || (new->con_layer1 < 0) || (new->con_layer2 < 0))
{
errorReturn:
freeMagic((char *) new);
return TRUE;
}
if (!StrIsInt(argv[2]))
{
TechError("3rd field must be an integer.\n");
goto errorReturn;
}
else new->con_size = atoi(argv[2]);
if (!StrIsInt(argv[4]))
{
TechError("5th field must be an integer.\n");
goto errorReturn;
}
else new->con_surround1 = atoi(argv[4]);
if (!StrIsInt(argv[6]))
{
TechError("6th field must be an integer.\n");
goto errorReturn;
}
else new->con_surround2 = atoi(argv[6]);
new->con_next = WireContacts;
WireContacts = new;
return TRUE;
}
/*
* ----------------------------------------------------------------------------
* WireTechFinal --
*
* This procedure is called by the technology module after all the
* lines of the tech file have been read. It doesn't do anything
* right now.
*
* Results:
* None.
*
* Side effects:
* None.
* ----------------------------------------------------------------------------
*/
void
WireTechFinal()
{
/* Debugging code to print info about layers: */
/*
Contact *con;
for (con = WireContacts; con != NULL; con = con->con_next)
{
TxPrintf("Contact type \"%s\", size %d connects\n",
DBTypeLongName(con->con_type), con->con_size);
TxPrintf(" \"%s\" (overlap %d) and\n",
DBTypeLongName(con->con_layer1), con->con_surround1);
TxPrintf(" \"%s\" (overlap %d)\n",
DBTypeLongName(con->con_layer2), con->con_surround2);
}
*/
}
/*
*----------------------------------------------------------------------------
* WireTechScale --
*
* Change parameters of the wiring section as required when
* redefining magic's internal grid relative to the technology lambda.
*
*----------------------------------------------------------------------------
*/
int
WireTechScale(scalen, scaled)
int scalen, scaled;
{
Contact *con;
for (con = WireContacts; con != NULL; con = con->con_next)
{
con->con_size *= scalen;
con->con_size /= scaled;
con->con_surround1 *= scalen;
con->con_surround1 /= scaled;
con->con_surround2 *= scalen;
con->con_surround2 /= scaled;
}
}

View File

@ -48,10 +48,15 @@ typedef struct _Contact
* con_layer1 must be painted around the
* edge of the contact.
*/
int con_extend1; /* How much additional material of type
* con_layer1 must extend beyond the
* contact in the orientation of the route.
*/
TileType con_layer2; /* Same information for second layer that
* the contact connects.
*/
int con_surround2;
int con_extend2;
ContactPtr con_next; /* Pointer to next contact record */
} Contact;