Modified the "writeall" command to (1) raise an error message when

"writeall force <cell>" is used but <cell> doesn't exist, and (2)
to add options "writeall modified" and "writeall noupdate" (which
may or may not be useful).
This commit is contained in:
Tim Edwards 2022-01-21 17:43:04 -05:00
parent 93c4503fa8
commit 5dd0c97dce
3 changed files with 45 additions and 6 deletions

View File

@ -552,6 +552,10 @@ calmaParseStructure(filename)
DBW_ALLWINDOWS, &DBAllButSpaceBits);
DBCellSetModified(cifReadCellDef, TRUE);
/* Only mark cell as needing a timestamp update if the timestamp is zero */
if (cifReadCellDef->cd_timestamp != 0)
cifReadCellDef->cd_flags &= ~CDGETNEWSTAMP;
/*
* Assign use-identifiers to all the cell uses.
* These identifiers are generated so as to be

View File

@ -1807,26 +1807,52 @@ CmdWire(w, cmd)
* ----------------------------------------------------------------------------
*/
#define OPT_WRITEALL_FORCE 0
#define OPT_WRITEALL_MODIFIED 1
#define OPT_WRITEALL_NOUPDATE 2
void
CmdWriteall(w, cmd)
MagWindow *w;
TxCommand *cmd;
{
int cmdWriteallFunc();
static char *force[] = { "force", 0 };
int option = -1;
static char *writeallOpts[] = { "force", "modified", "noupdate", 0 };
int argc;
int flags = CDMODIFIED | CDBOXESCHANGED | CDSTAMPSCHANGED;
if (cmd->tx_argc >= 2)
{
flags = 0;
if (Lookup(cmd->tx_argv[1], force) < 0)
option = Lookup(cmd->tx_argv[1], writeallOpts);
if (option < 0)
{
TxError("Usage: %s [force [cellname ...]]\n", cmd->tx_argv[0]);
TxError("Usage: %s [force|modified|noupdate [cellname ...]]\n",
cmd->tx_argv[0]);
return;
}
if (option == OPT_WRITEALL_MODIFIED) flags = CDMODIFIED;
/* Check if all cells exist */
if (cmd->tx_argc > 2)
{
int i;
int notfound = 0;
for (i = 2; i < cmd->tx_argc; i++)
{
if (DBCellLookDef(cmd->tx_argv[i]) == NULL)
{
TxError("No such cell \"%s\".\n", cmd->tx_argv[i]);
notfound++;
}
}
if (notfound == cmd->tx_argc - 2) return;
}
}
DBUpdateStamps();
if (option != OPT_WRITEALL_NOUPDATE)
DBUpdateStamps();
argc = cmd->tx_argc;
(void) DBCellSrDefs(flags, cmdWriteallFunc, (ClientData)cmd);
cmd->tx_argc = argc;

View File

@ -31,7 +31,7 @@ Write out all modified cells to disk
<H3>Usage:</H3>
<BLOCKQUOTE>
<B>writeall</B> [<B>force</B> <I>cell1 cell2...</I>]<BR><BR>
<B>writeall</B> [<B>force</B>|<B>modified</B>|<B>noupdate</B> <I>cell1 cell2...</I>]<BR><BR>
</BLOCKQUOTE>
<H3>Summary:</H3>
@ -69,7 +69,16 @@ Write out all modified cells to disk
in the hierarchy with no prompting. If one or more cell names
follows <B>write force</B>, the cells listed will be written
(action "write") and all other cells will be ignored (action
"skip").
"skip"). <P>
With the option <B>write modified</B>, the command writes all
cells in the hierarchy which have been modified, ignoring those
cells marked as needing only a bounding box or timestamp update. <P>
With the option <B>write noupdate</B>, the command writes all
cells in the hierarchy like it would for <B>write force</B>, but
it does not update timestamps. <P>
</BLOCKQUOTE>
<H3>Implementation Notes:</H3>