Added a command option "cellname dereference" to force a dereferencing

flush of a cell, by name.
This commit is contained in:
Tim Edwards 2020-12-10 11:49:53 -05:00
parent f8edb30d4e
commit 6952e814f6
2 changed files with 37 additions and 12 deletions

View File

@ -689,6 +689,7 @@ CmdCellname(w, cmd)
"window list top-level cell of a layout window",
"create create a new cell definition",
"delete delete the named cell definition",
"dereference reload the named cell from the search paths",
"filepath list the full path of the file for the cell",
"flags list option flags of the indicated cell definition",
"lock lock the named cell (prevent changes to cell use)",
@ -703,10 +704,10 @@ CmdCellname(w, cmd)
};
typedef enum { IDX_CHILDREN, IDX_PARENTS, IDX_EXISTS, IDX_SELF,
IDX_INSTANCE, IDX_CHILDINST, IDX_CELLDEF, IDX_ALLCELLS,
IDX_TOPCELLS, IDX_IN_WINDOW, IDX_CREATE,
IDX_DELETE, IDX_FILEPATH, IDX_FLAGS, IDX_LOCK, IDX_UNLOCK,
IDX_PROPERTY, IDX_ABUTMENT, IDX_ORIENTATION, IDX_RENAME,
IDX_READWRITE, IDX_MODIFIED } optionType;
IDX_TOPCELLS, IDX_IN_WINDOW, IDX_CREATE, IDX_DELETE,
IDX_DEREFERENCE, IDX_FILEPATH, IDX_FLAGS, IDX_LOCK,
IDX_UNLOCK, IDX_PROPERTY, IDX_ABUTMENT, IDX_ORIENTATION,
IDX_RENAME, IDX_READWRITE, IDX_MODIFIED } optionType;
if (strstr(cmd->tx_argv[0], "in"))
is_cellname = FALSE;
@ -743,8 +744,9 @@ CmdCellname(w, cmd)
if (option < 0) goto badusage;
if ((locargc > 3) && (option != IDX_RENAME) && (option != IDX_DELETE) &&
(option != IDX_READWRITE) && (option != IDX_PROPERTY) &&
(option != IDX_FILEPATH) && (option != IDX_ORIENTATION))
(option != IDX_DEREFERENCE) && (option != IDX_READWRITE) &&
(option != IDX_PROPERTY) && (option != IDX_FILEPATH) &&
(option != IDX_ORIENTATION))
goto badusage;
if ((locargc > 4) && (option != IDX_PROPERTY))
@ -790,6 +792,7 @@ CmdCellname(w, cmd)
return;
case IDX_IN_WINDOW: case IDX_READWRITE: case IDX_FLAGS:
case IDX_PROPERTY: case IDX_FILEPATH: case IDX_MODIFIED:
case IDX_DEREFERENCE:
TxError("Function unimplemented for instances.\n");
return;
case IDX_DELETE:
@ -867,6 +870,33 @@ CmdCellname(w, cmd)
TxError("Delete cell command missing cellname\n");
break;
case IDX_DEREFERENCE:
/* Unload the cell definition and re-read with search paths */
if (locargc == 3)
{
void cmdFlushCell();
if (cellname == NULL)
cellDef = EditRootDef;
else
cellDef = DBCellLookDef(cellname);
/* Force dereferencing */
cellDef->cd_flags |= CDDEREFERENCE;
freeMagic(cellDef->cd_file);
cellDef->cd_file = NULL;
/* Reload cell */
cmdFlushCell(cellDef);
/* Clear dereferencing */
cellDef->cd_flags &= ~CDDEREFERENCE;
SelectClear();
}
else
TxError("Dereference cell command missing cellname\n");
break;
case IDX_READWRITE:
if (cellname == NULL)
cellDef = EditRootDef;

View File

@ -197,12 +197,7 @@ DRCCheckThis (celldef, operation, area)
* of CellDefs waiting for DRC
*/
/* Ignore internal GDS cells. */
/* Note that this rescinds the former behavior of ignoring DRC on */
/* vendor and read-only cells. Such cells will be flattened in */
/* interaction areas and show errors anyway, so not showing errors */
/* in the cell is just confusing. */
/* Ignore internal cells. */
if (celldef->cd_flags & CDINTERNAL) return;
/* Insert celldef into list of Defs waiting to be checked, unless */