Modified the handling of GDS library names to avoid creating cells
with slashes in the name (picks up the text after the last slash). Also allowed the "gds library" command option to modify the behavior of "gds read" (previously only affected "gds write") to indicate that the GDS file is a library and that there are no top- level contents, only subcell definitions. Also: Corrected a typo from yesterday's commit that prevents magic from compiling (oops).
This commit is contained in:
parent
2561afd402
commit
eed9882bf2
|
|
@ -94,6 +94,8 @@ bool CalmaUnique = FALSE; /* If TRUE, then if a cell exists in
|
||||||
* memory is renamed to a unique
|
* memory is renamed to a unique
|
||||||
* identifier with a _N suffix.
|
* identifier with a _N suffix.
|
||||||
*/
|
*/
|
||||||
|
extern bool CalmaDoLibrary; /* Also used by GDS write */
|
||||||
|
|
||||||
extern void calmaUnexpected();
|
extern void calmaUnexpected();
|
||||||
extern int calmaWriteInitFunc();
|
extern int calmaWriteInitFunc();
|
||||||
|
|
||||||
|
|
@ -157,7 +159,7 @@ CalmaReadFile(file, filename)
|
||||||
char *filename; /* The real name of the file read */
|
char *filename; /* The real name of the file read */
|
||||||
{
|
{
|
||||||
int k, version;
|
int k, version;
|
||||||
char *libname = NULL;
|
char *libname = NULL, *libnameptr;
|
||||||
MagWindow *mw;
|
MagWindow *mw;
|
||||||
static int hdrSkip[] = { CALMA_FORMAT, CALMA_MASK, CALMA_ENDMASKS,
|
static int hdrSkip[] = { CALMA_FORMAT, CALMA_MASK, CALMA_ENDMASKS,
|
||||||
CALMA_REFLIBS, CALMA_FONTS, CALMA_ATTRTABLE,
|
CALMA_REFLIBS, CALMA_FONTS, CALMA_ATTRTABLE,
|
||||||
|
|
@ -216,15 +218,43 @@ CalmaReadFile(file, filename)
|
||||||
if (!calmaSkipExact(CALMA_BGNLIB)) goto done;
|
if (!calmaSkipExact(CALMA_BGNLIB)) goto done;
|
||||||
calmaSkipSet(skipBeforeLib);
|
calmaSkipSet(skipBeforeLib);
|
||||||
if (!calmaReadStringRecord(CALMA_LIBNAME, &libname)) goto done;
|
if (!calmaReadStringRecord(CALMA_LIBNAME, &libname)) goto done;
|
||||||
if ((libname != NULL) && (libname[0] != '\0'))
|
|
||||||
|
/* Use CalmaDoLibrary similarly for input as for output; if set to */
|
||||||
|
/* TRUE, the library name is considered meaningless and discarded; */
|
||||||
|
/* the GDS file contents are read into memory but no view is loaded */
|
||||||
|
|
||||||
|
if (CalmaDoLibrary)
|
||||||
|
libnameptr = NULL;
|
||||||
|
else
|
||||||
|
libnameptr = libname;
|
||||||
|
|
||||||
|
if ((libnameptr != NULL) && (libname[0] != '\0'))
|
||||||
{
|
{
|
||||||
|
bool modified = FALSE;
|
||||||
|
char *sptr;
|
||||||
|
|
||||||
/* Avoid generating a magic name with spaces in it. . . */
|
/* Avoid generating a magic name with spaces in it. . . */
|
||||||
/* (added by Mike Godfrey, 7/17/05) */
|
/* (added by Mike Godfrey, 7/17/05) */
|
||||||
|
|
||||||
for (k = 0; k < strlen(libname); k++)
|
for (k = 0; k < strlen(libname); k++)
|
||||||
if (libname[k] == ' ')
|
if (libname[k] == ' ')
|
||||||
|
{
|
||||||
libname[k] = '_';
|
libname[k] = '_';
|
||||||
TxPrintf("Library name: %s\n", libname);
|
modified = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Avoid generating a magic name with slashes in it. . . */
|
||||||
|
/* (added by Tim, 8/26/2022) */
|
||||||
|
|
||||||
|
if ((sptr = strrchr(libname, '/')) != NULL)
|
||||||
|
{
|
||||||
|
libnameptr = sptr + 1;
|
||||||
|
modified = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modified)
|
||||||
|
TxPrintf("Library name modified to make legal cell name syntax.\n");
|
||||||
|
TxPrintf("Library name: %s\n", libnameptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Skip the reflibs, fonts, etc. cruft */
|
/* Skip the reflibs, fonts, etc. cruft */
|
||||||
|
|
@ -249,15 +279,15 @@ done:
|
||||||
/* top-level cell, so magic-produced GDS can be read back */
|
/* top-level cell, so magic-produced GDS can be read back */
|
||||||
/* with the expected cell appearing in the layout window. */
|
/* with the expected cell appearing in the layout window. */
|
||||||
|
|
||||||
if (libname != NULL)
|
if (libnameptr != NULL)
|
||||||
{
|
{
|
||||||
mw = CmdGetRootPoint((Point *)NULL, (Rect *)NULL);
|
mw = CmdGetRootPoint((Point *)NULL, (Rect *)NULL);
|
||||||
if (mw == NULL)
|
if (mw == NULL)
|
||||||
windCheckOnlyWindow(&mw, DBWclientID);
|
windCheckOnlyWindow(&mw, DBWclientID);
|
||||||
if (mw != NULL)
|
if (mw != NULL)
|
||||||
{
|
{
|
||||||
if (calmaLookCell(libname, NULL) != (CellDef *)NULL)
|
if (calmaLookCell(libnameptr, NULL) != (CellDef *)NULL)
|
||||||
DBWloadWindow(mw, libname, 0);
|
DBWloadWindow(mw, libnameptr, 0);
|
||||||
}
|
}
|
||||||
freeMagic(libname);
|
freeMagic(libname);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -802,7 +802,7 @@ antennaAccumFunc(tile, aaptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NOTE: The "partial" model ignores the contribution of vias. */
|
/* NOTE: The "partial" model ignores the contribution of vias. */
|
||||||
if (!(ExtCurStyle->exts_antennaModel & ANTENNAMODE_PARTIAL))
|
if (!(ExtCurStyle->exts_antennaModel & ANTENNAMODEL_PARTIAL))
|
||||||
{
|
{
|
||||||
if (type >= DBNumUserLayers)
|
if (type >= DBNumUserLayers)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue