cmd line args -exit cmd_file (flush -x, -f)
This commit is contained in:
parent
154dcf0042
commit
c66da2935f
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
cmake_minimum_required (VERSION 3.9)
|
||||
|
||||
project(STA VERSION 2.0.15)
|
||||
project(STA VERSION 2.0.16)
|
||||
|
||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ extern const char *tcl_inits[];
|
|||
|
||||
int
|
||||
main(int argc,
|
||||
char **argv)
|
||||
char *argv[])
|
||||
{
|
||||
if (argc == 2 && stringEq(argv[1], "-help")) {
|
||||
showUseage(argv[0]);
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ static const char *init_filename = "[file join $env(HOME) .sta]";
|
|||
void
|
||||
staMain(Sta *sta,
|
||||
int argc,
|
||||
char **argv,
|
||||
char *argv[],
|
||||
SwigInitFunc swig_init,
|
||||
const char *tcl_inits[])
|
||||
{
|
||||
|
|
@ -82,7 +82,7 @@ parseThreadsArg(int argc,
|
|||
// Set globals to pass to staTclAppInit.
|
||||
void
|
||||
staSetupAppInit(int argc,
|
||||
char **argv,
|
||||
char *argv[],
|
||||
SwigInitFunc swig_init,
|
||||
const char *tcl_inits[])
|
||||
{
|
||||
|
|
@ -121,43 +121,65 @@ staTclAppInit(Tcl_Interp *interp)
|
|||
if (!findCmdLineFlag(argc, argv, "-no_init"))
|
||||
sourceTclFile(init_filename, true, true, interp);
|
||||
|
||||
// "-x cmd" is evaled before -f file is sourced.
|
||||
char *cmd = findCmdLineKey(argc, argv, "-x");
|
||||
if (cmd)
|
||||
Tcl_Eval(interp, cmd);
|
||||
|
||||
// "-f cmd_file" is evaled as "source -echo -verbose file".
|
||||
char *file = findCmdLineKey(argc, argv, "-f");
|
||||
if (file)
|
||||
sourceTclFile(file, true, true, interp);
|
||||
bool exit_after_cmd_file = findCmdLineFlag(argc, argv, "-exit");
|
||||
|
||||
if (argc > 2 ||
|
||||
(argc > 1 && argv[1][0] == '-'))
|
||||
showUseage(argv[0]);
|
||||
else {
|
||||
if (argc == 2) {
|
||||
char *cmd_file = argv[1];
|
||||
if (cmd_file) {
|
||||
sourceTclFile(cmd_file, false, false, interp);
|
||||
if (exit_after_cmd_file)
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
}
|
||||
}
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
bool
|
||||
findCmdLineFlag(int argc,
|
||||
char **argv,
|
||||
findCmdLineFlag(int &argc,
|
||||
char *argv[],
|
||||
const char *flag)
|
||||
{
|
||||
for (int argi = 1; argi < argc; argi++) {
|
||||
char *arg = argv[argi];
|
||||
if (stringEq(arg, flag))
|
||||
return true;
|
||||
bool found = false;
|
||||
int j = 1;
|
||||
int argc1 = argc;
|
||||
for (int i = 1; i < argc1; i++) {
|
||||
char *arg = argv[i];
|
||||
if (stringEq(arg, flag)) {
|
||||
found = true;
|
||||
// remove flag from argv.
|
||||
argc--;
|
||||
}
|
||||
else
|
||||
argv[j++] = argv[i];
|
||||
}
|
||||
return false;
|
||||
return found;
|
||||
}
|
||||
|
||||
char *
|
||||
findCmdLineKey(int argc,
|
||||
char **argv,
|
||||
findCmdLineKey(int &argc,
|
||||
char *argv[],
|
||||
const char *key)
|
||||
{
|
||||
for (int argi = 1; argi < argc; argi++) {
|
||||
char *arg = argv[argi];
|
||||
if (stringEq(arg, key) && argi + 1 < argc)
|
||||
return argv[argi + 1];
|
||||
char *value = nullptr;
|
||||
int j = 1;
|
||||
int argc1 = argc;
|
||||
for (int i = 1; i < argc1; i++) {
|
||||
char *arg = argv[i];
|
||||
if (stringEq(arg, key) && i + 1 < argc) {
|
||||
value = argv[i + 1];
|
||||
// remove key and value from argv.
|
||||
i++;
|
||||
argc -= 2;
|
||||
}
|
||||
else
|
||||
argv[j++] = argv[i];
|
||||
}
|
||||
return nullptr;
|
||||
return value;
|
||||
}
|
||||
|
||||
// Use overridden version of source to echo cmds and results.
|
||||
|
|
@ -210,14 +232,14 @@ evalTclInit(Tcl_Interp *interp,
|
|||
void
|
||||
showUseage(char *prog)
|
||||
{
|
||||
printf("Usage: %s [-help] [-version] [-no_init] [-f cmd_file]\n", prog);
|
||||
printf("Usage: %s [-help] [-version] [-no_init] [-exit] cmd_file\n", prog);
|
||||
printf(" -help show help and exit\n");
|
||||
printf(" -version show version and exit\n");
|
||||
printf(" -no_init do not read .sta init file\n");
|
||||
printf(" -x cmd evaluate cmd\n");
|
||||
printf(" -f cmd_file source cmd_file\n");
|
||||
printf(" -threads count|max use count threads\n");
|
||||
printf(" -no_splash do not show the license splash at startup\n");
|
||||
printf(" -exit exit after reading cmd_file\n");
|
||||
printf(" cmd_file source cmd_file\n");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
|||
|
|
@ -29,14 +29,14 @@ typedef int (*SwigInitFunc)(Tcl_Interp *);
|
|||
void
|
||||
staMain(Sta *sta,
|
||||
int argc,
|
||||
char **argv,
|
||||
char *argv[],
|
||||
SwigInitFunc swig_init,
|
||||
const char *tcl_inits[]);
|
||||
|
||||
// Set arguments passed to staTclAppInit inside the tcl interpreter.
|
||||
void
|
||||
staSetupAppInit(int argc,
|
||||
char **argv,
|
||||
char *argv[],
|
||||
SwigInitFunc swig_init,
|
||||
const char *tcl_inits[]);
|
||||
|
||||
|
|
@ -53,12 +53,12 @@ evalTclInit(Tcl_Interp *interp,
|
|||
const char *inits[]);
|
||||
|
||||
bool
|
||||
findCmdLineFlag(int argc,
|
||||
char **argv,
|
||||
findCmdLineFlag(int &argc,
|
||||
char *argv[],
|
||||
const char *flag);
|
||||
char *
|
||||
findCmdLineKey(int argc,
|
||||
char **argv,
|
||||
findCmdLineKey(int &argc,
|
||||
char *argv[],
|
||||
const char *key);
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -6,6 +6,19 @@ This file summarizes user visible changes for each release.
|
|||
Release 2.0.0 2018/09/28
|
||||
-------------------------
|
||||
|
||||
The command line options have changed to the following:
|
||||
|
||||
-help show help and exit
|
||||
-version show version and exit
|
||||
-no_init do not read .sta init file
|
||||
-threads count|max use count threads
|
||||
-no_splash do not show the license splash at startup
|
||||
-exit exit after reading cmd_file
|
||||
cmd_file source cmd_file
|
||||
|
||||
|
||||
....
|
||||
|
||||
Builds using Autotools/configure are no longer supported.
|
||||
Use CMake as documented in README.mb.
|
||||
|
||||
|
|
|
|||
BIN
doc/OpenSTA.odt
BIN
doc/OpenSTA.odt
Binary file not shown.
Loading…
Reference in New Issue