Changed extraction to avoid generating an error message for devices

like resistors where a tile other than space may border the resistor
device on its non-terminal sides (which is handled correctly, and
should not be considered an error).
This commit is contained in:
Tim Edwards 2019-11-19 11:39:59 -05:00
parent d3eb03d19a
commit 3aa09725cb
3 changed files with 23 additions and 6 deletions

View File

@ -1508,13 +1508,18 @@ CIFReadCellCleanup(filetype)
freeMagic((char *)def->cd_client); freeMagic((char *)def->cd_client);
def->cd_client = (ClientData)CLIENTDEFAULT; def->cd_client = (ClientData)CLIENTDEFAULT;
#if 0
/* If the CDFLATTENED flag was not set, then this geometry */ /* If the CDFLATTENED flag was not set, then this geometry */
/* was never instantiated, and should generate a warning. */ /* was never instantiated, and should generate a message. */
/* However, this is not an error condition as there are a */
/* number of useful reasons to copy lots of information up */
/* the GDS hierarchy for "just in case" scenarios. */
if (!(def->cd_flags & CDFLATTENED)) if (!(def->cd_flags & CDFLATTENED))
CIFReadError("%s read error: Unresolved geometry in cell" CIFReadWarning("%s read: Unresolved geometry in cell"
" %s maps to no magic layers\n", " %s maps to no magic layers\n",
(filetype == FILE_CIF) ? "CIF" : "GDS", def->cd_name); (filetype == FILE_CIF) ? "CIF" : "GDS", def->cd_name);
#endif
#if 0 #if 0
/* Remove the cell if it has no parents, no children, and no geometry */ /* Remove the cell if it has no parents, no children, and no geometry */

View File

@ -120,7 +120,10 @@ CIFReadError(char *format, ...)
if (CIFWarningLevel == CIF_WARN_NONE) return; if (CIFWarningLevel == CIF_WARN_NONE) return;
if ((cifTotalErrors < 100) || (CIFWarningLevel != CIF_WARN_LIMIT)) if ((cifTotalErrors < 100) || (CIFWarningLevel != CIF_WARN_LIMIT))
{ {
if (cifLineNumber > 0)
TxError("Error at line %d of CIF file: ", cifLineNumber); TxError("Error at line %d of CIF file: ", cifLineNumber);
else
TxError("CIF file read error: ", cifLineNumber);
va_start(args, format); va_start(args, format);
Vfprintf(stderr, format, args); Vfprintf(stderr, format, args);
va_end(args); va_end(args);
@ -141,7 +144,10 @@ CIFReadWarning(char *format, ...)
if (CIFWarningLevel == CIF_WARN_NONE) return; if (CIFWarningLevel == CIF_WARN_NONE) return;
if ((cifTotalWarnings < 100) || (CIFWarningLevel != CIF_WARN_LIMIT)) if ((cifTotalWarnings < 100) || (CIFWarningLevel != CIF_WARN_LIMIT))
{ {
if (cifLineNumber > 0)
TxError("Warning at line %d of CIF file: ", cifLineNumber); TxError("Warning at line %d of CIF file: ", cifLineNumber);
else
TxError("CIF file read warning: ");
va_start(args, format); va_start(args, format);
Vfprintf(stderr, format, args); Vfprintf(stderr, format, args);
va_end(args); va_end(args);

View File

@ -2800,10 +2800,16 @@ extTransPerimFunc(bp)
devptr = extDevFindMatch(devptr, tinside); devptr = extDevFindMatch(devptr, tinside);
if (devptr == deventry) devptr = NULL; if (devptr == deventry) devptr = NULL;
} }
if (devptr == NULL) if (devptr == NULL)
{ {
TxError("Error: Cannot find valid terminals on device %s!\n", /* Outside type is not a terminal, so return to the original */
DBTypeLongNameTbl[tinside]); /* device record. NOTE: Should probably check if this device */
/* type is a FET, as being here would indicate an error. */
/* However, failure to find all terminals will be flagged as an */
/* error elsewhere. */
extTransRec.tr_devrec = deventry;
} }
/* /*