Added "gds" command option "gds nodatestamp [true|false]". Set to

true, this will force the "gds write" command to write out creation
date stamps as zero.  This is very useful for avoiding changing the
contents of an otherwise-unchanged layout, especially if it is in
a git repository where it will force the entire file to be replaced.
This commit is contained in:
Tim Edwards 2020-12-15 14:52:30 -05:00
parent 69bd2fe57b
commit 5755e0bcfd
4 changed files with 69 additions and 31 deletions

View File

@ -1 +1 @@
8.3.97
8.3.98

View File

@ -58,6 +58,7 @@ bool CalmaDoLabels = TRUE; /* If FALSE, don't output labels with GDS-II */
bool CalmaDoLower = TRUE; /* If TRUE, allow lowercase labels. */
bool CalmaFlattenArrays = FALSE; /* If TRUE, output arrays as individual uses */
bool CalmaAddendum = FALSE; /* If TRUE, do not output readonly cell defs */
bool CalmaNoDateStamp = FALSE; /* If TRUE, output zero for creation date stamp */
/* Experimental stuff---not thoroughly tested (as of Sept. 2007)! */
bool CalmaContactArrays = FALSE; /* If TRUE, output contacts as subcell arrays */
@ -396,7 +397,10 @@ calmaDumpStructure(def, outf, calmaDefHash, filename)
/* Output structure begin */
calmaOutRH(28, CALMA_BGNSTR, CALMA_I2, outf);
calmaOutDate(def->cd_timestamp, outf);
if (CalmaNoDateStamp)
calmaOutDate(time((time_t *) 0), outf);
else
calmaOutDate(def->cd_timestamp, outf);
calmaOutDate(time((time_t *) 0), outf);
/* Find the structure's unique prefix, in case structure calls subcells */
@ -868,7 +872,10 @@ calmaProcessDef(def, outf, do_library)
/* Output structure header */
calmaOutRH(28, CALMA_BGNSTR, CALMA_I2, outf);
calmaOutDate(def->cd_timestamp, outf);
if (CalmaNoDateStamp)
calmaOutDate(time((time_t *) 0), outf);
else
calmaOutDate(def->cd_timestamp, outf);
calmaOutDate(time((time_t *) 0), outf);
/* Name structure the same as the magic cellname */
@ -965,7 +972,10 @@ calmaOutFunc(def, f, cliprect)
/* Output structure begin */
calmaOutRH(28, CALMA_BGNSTR, CALMA_I2, f);
calmaOutDate(def->cd_timestamp, f);
if (CalmaNoDateStamp)
calmaOutDate(time((time_t *) 0), f);
else
calmaOutDate(def->cd_timestamp, f);
calmaOutDate(time((time_t *) 0), f);
/* Output structure name */
@ -2694,7 +2704,10 @@ calmaOutHeader(rootDef, f)
/* Beginning of library */
calmaOutRH(28, CALMA_BGNLIB, CALMA_I2, f);
calmaOutDate(rootDef->cd_timestamp, f);
if (CalmaNoDateStamp)
calmaOutDate(time((time_t *) 0), f);
else
calmaOutDate(rootDef->cd_timestamp, f);
calmaOutDate(time((time_t *) 0), f);
/* Library name (name of root cell) */

View File

@ -32,6 +32,7 @@ extern bool CalmaDoLibrary;
extern bool CalmaDoLower;
extern bool CalmaAddendum;
extern bool CalmaNoDuplicates;
extern bool CalmaNoDateStamp;
extern bool CalmaMergeTiles;
extern bool CalmaFlattenArrays;
extern bool CalmaNoDRCCheck;

View File

@ -99,14 +99,15 @@ bool cmdDumpParseArgs();
#define CALMA_LIBRARY 8
#define CALMA_LOWER 9
#define CALMA_MERGE 10
#define CALMA_NO_DUP 11
#define CALMA_READ 12
#define CALMA_READONLY 13
#define CALMA_RESCALE 14
#define CALMA_WARNING 15
#define CALMA_WRITE 16
#define CALMA_POLYS 17
#define CALMA_PATHS 18
#define CALMA_NO_STAMP 11
#define CALMA_NO_DUP 12
#define CALMA_READ 13
#define CALMA_READONLY 14
#define CALMA_RESCALE 15
#define CALMA_WARNING 16
#define CALMA_WRITE 17
#define CALMA_POLYS 18
#define CALMA_PATHS 19
#define CALMA_WARN_HELP CIF_WARN_END /* undefined by CIF module */
@ -123,7 +124,8 @@ CmdCalma(w, cmd)
extern int CalmaFlattenLimit;
static char *gdsExts[] = {".gds", ".gds2", ".strm", "", NULL};
static char *cmdCalmaYesNo[] = { "no", "false", "off", "yes", "true", "on", 0 };
static char *cmdCalmaYesNo[] = {
"no", "false", "off", "0", "yes", "true", "on", "1", 0 };
static char *cmdCalmaWarnOptions[] = { "default", "none", "align",
"limit", "redirect", "help", 0 };
static char *cmdCalmaOption[] =
@ -140,6 +142,7 @@ CmdCalma(w, cmd)
"lower [yes|no] allow both upper and lower case in labels",
"merge [yes|no] merge tiles into polygons in the output",
"noduplicates [yes|no] do not read cells that exist before reading GDS",
"nodatestamp [yes|no] write a zero value creation date stamp",
"read file read Calma GDS-II format from \"file\"\n"
" into edit cell",
"readonly [yes|no] set cell as read-only and generate output from GDS file",
@ -222,15 +225,16 @@ CmdCalma(w, cmd)
else if (cmd->tx_argc != 3)
{
wrongNumArgs:
TxError("Wrong number of arguments in \"gds\" command.");
TxError(" Try \":gds help\" for help.\n");
TxError("Wrong number of arguments in \"%s\" command.",
cmd->tx_argv[0]);
TxError(" Try \":%s help\" for help.\n", cmd->tx_argv[0]);
return;
}
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaDoLabels = (option < 3) ? FALSE : TRUE;
CalmaDoLabels = (option < 4) ? FALSE : TRUE;
return;
case CALMA_LIBRARY:
@ -250,7 +254,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaDoLibrary = (option < 3) ? FALSE : TRUE;
CalmaDoLibrary = (option < 4) ? FALSE : TRUE;
return;
case CALMA_ADDENDUM:
@ -270,7 +274,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaAddendum = (option < 3) ? FALSE : TRUE;
CalmaAddendum = (option < 4) ? FALSE : TRUE;
return;
case CALMA_CONTACTS:
@ -292,7 +296,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaContactArrays = (option < 3) ? FALSE : TRUE;
CalmaContactArrays = (option < 4) ? FALSE : TRUE;
return;
case CALMA_DRCCHECK:
@ -312,7 +316,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaNoDRCCheck = (option < 3) ? TRUE : FALSE;
CalmaNoDRCCheck = (option < 4) ? TRUE : FALSE;
return;
case CALMA_FLATTEN:
@ -343,7 +347,7 @@ CmdCalma(w, cmd)
goto wrongNumArgs;
}
else
CalmaFlattenUses = (option < 3) ? FALSE : TRUE;
CalmaFlattenUses = (option < 4) ? FALSE : TRUE;
return;
case CALMA_ORDERING:
@ -366,7 +370,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaPostOrder = (option < 3) ? FALSE : TRUE;
CalmaPostOrder = (option < 4) ? FALSE : TRUE;
return;
case CALMA_ARRAYS:
@ -386,7 +390,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaFlattenArrays = (option < 3) ? FALSE : TRUE;
CalmaFlattenArrays = (option < 4) ? FALSE : TRUE;
return;
case CALMA_LOWER:
@ -406,7 +410,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaDoLower = (option < 3) ? FALSE : TRUE;
CalmaDoLower = (option < 4) ? FALSE : TRUE;
return;
case CALMA_MERGE:
@ -428,7 +432,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaMergeTiles = (option < 3) ? FALSE : TRUE;
CalmaMergeTiles = (option < 4) ? FALSE : TRUE;
return;
case CALMA_POLYS:
@ -450,7 +454,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[3], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaSubcellPolygons = (option < 3) ? FALSE : TRUE;
CalmaSubcellPolygons = (option < 4) ? FALSE : TRUE;
return;
case CALMA_NO_DUP:
@ -470,7 +474,27 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaNoDuplicates = (option < 3) ? FALSE : TRUE;
CalmaNoDuplicates = (option < 4) ? FALSE : TRUE;
return;
case CALMA_NO_STAMP:
if (cmd->tx_argc == 2)
{
#ifdef MAGIC_WRAPPER
Tcl_SetObjResult(magicinterp, Tcl_NewBooleanObj(CalmaNoDateStamp));
#else
TxPrintf("Structures will contain a %s header creation date stamp.\n",
(CalmaNoDateStamp) ? "zero" : "valid");
#endif
return;
}
else if (cmd->tx_argc != 3)
goto wrongNumArgs;
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaNoDateStamp = (option < 4) ? FALSE : TRUE;
return;
case CALMA_PATHS:
@ -492,7 +516,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[3], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaSubcellPaths = (option < 3) ? FALSE : TRUE;
CalmaSubcellPaths = (option < 4) ? FALSE : TRUE;
return;
case CALMA_READONLY:
@ -512,7 +536,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CalmaReadOnly = (option < 3) ? FALSE : TRUE;
CalmaReadOnly = (option < 4) ? FALSE : TRUE;
return;
case CALMA_RESCALE:
@ -532,7 +556,7 @@ CmdCalma(w, cmd)
option = Lookup(cmd->tx_argv[2], cmdCalmaYesNo);
if (option < 0)
goto wrongNumArgs;
CIFRescaleAllow = (option < 3) ? FALSE : TRUE;
CIFRescaleAllow = (option < 4) ? FALSE : TRUE;
if (!CIFRescaleAllow)
CIFWarningLevel = CIF_WARN_LIMIT;
return;