summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-02-07 14:17:00 +0100
committerClifford Wolf <clifford@clifford.at>2014-02-07 14:17:00 +0100
commita51a3fa2d274f665d371bb30de6beb01490f79e0 (patch)
tree1caf0bf26ce5b06c357324c1bfd6a36203b535b3 /kernel
parent366dcd3abf4987b020eac49e1947086be3214cc3 (diff)
Added echo command
Diffstat (limited to 'kernel')
-rw-r--r--kernel/driver.cc2
-rw-r--r--kernel/register.cc48
-rw-r--r--kernel/register.h1
3 files changed, 47 insertions, 4 deletions
diff --git a/kernel/driver.cc b/kernel/driver.cc
index d31d36b2..00a61ec0 100644
--- a/kernel/driver.cc
+++ b/kernel/driver.cc
@@ -212,7 +212,7 @@ static char **readline_completion(const char *text, int start, int)
return NULL;
}
-static const char *create_prompt(RTLIL::Design *design, int recursion_counter)
+const char *create_prompt(RTLIL::Design *design, int recursion_counter)
{
static char buffer[100];
std::string str = "\n";
diff --git a/kernel/register.cc b/kernel/register.cc
index 10ba4f27..32570966 100644
--- a/kernel/register.cc
+++ b/kernel/register.cc
@@ -29,6 +29,7 @@ using namespace REGISTER_INTERN;
namespace REGISTER_INTERN
{
+ bool echo_mode = false;
int raw_register_count = 0;
bool raw_register_done = false;
Pass *raw_register_array[MAX_REG_COUNT];
@@ -124,7 +125,7 @@ void Pass::extra_args(std::vector<std::string> args, size_t argidx, RTLIL::Desig
handle_extra_select_args(this, args, argidx, args.size(), design);
break;
}
- cmd_log_args(args);
+ // cmd_log_args(args);
}
void Pass::call(RTLIL::Design *design, std::string command)
@@ -173,6 +174,14 @@ void Pass::call(RTLIL::Design *design, std::vector<std::string> args)
{
if (args.size() == 0 || args[0][0] == '#')
return;
+
+ if (echo_mode) {
+ log("%s", create_prompt(design, 0));
+ for (size_t i = 0; i < args.size(); i++)
+ log("%s%s", i ? " " : "", args[i].c_str());
+ log("\n");
+ }
+
if (pass_register.count(args[0]) == 0)
log_cmd_error("No such command: %s (type 'help' for a command overview)\n", args[0].c_str());
@@ -269,7 +278,7 @@ void Frontend::extra_args(FILE *&f, std::string &filename, std::vector<std::stri
if (called_with_fp)
args.push_back(filename);
args[0] = pass_name;
- cmd_log_args(args);
+ // cmd_log_args(args);
}
void Frontend::frontend_call(RTLIL::Design *design, FILE *f, std::string filename, std::string command)
@@ -355,7 +364,7 @@ void Backend::extra_args(FILE *&f, std::string &filename, std::vector<std::strin
if (called_with_fp)
args.push_back(filename);
args[0] = pass_name;
- cmd_log_args(args);
+ // cmd_log_args(args);
if (f == NULL) {
filename = "<stdout>";
@@ -533,3 +542,36 @@ struct HelpPass : public Pass {
}
} HelpPass;
+struct EchoPass : public Pass {
+ EchoPass() : Pass("echo", "turning echoing back of commands on and off") { }
+ virtual void help()
+ {
+ log("\n");
+ log(" echo on\n");
+ log("\n");
+ log("Print all commands to log before executing them.\n");
+ log("\n");
+ log("\n");
+ log(" echo off\n");
+ log("\n");
+ log("Do not print all commands to log before executing them. (default)\n");
+ log("\n");
+ }
+ virtual void execute(std::vector<std::string> args, RTLIL::Design*)
+ {
+ if (args.size() > 2)
+ cmd_error(args, 2, "Unexpected argument.");
+
+ if (args.size() == 2) {
+ if (args[1] == "on")
+ echo_mode = true;
+ else if (args[1] == "off")
+ echo_mode = false;
+ else
+ cmd_error(args, 1, "Unexpected argument.");
+ }
+
+ log("echo %s\n", echo_mode ? "on" : "off");
+ }
+} EchoPass;
+
diff --git a/kernel/register.h b/kernel/register.h
index 3165d2bf..83e1059c 100644
--- a/kernel/register.h
+++ b/kernel/register.h
@@ -38,6 +38,7 @@ extern const char *yosys_version_str;
extern RTLIL::Design *yosys_get_design();
std::string rewrite_yosys_exe(std::string exe);
std::string get_share_file_name(std::string file);
+const char *create_prompt(RTLIL::Design *design, int recursion_counter);
struct Pass
{