summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mixlib/mix_vm_command.c45
-rw-r--r--mixlib/mix_vm_command.h7
2 files changed, 47 insertions, 5 deletions
diff --git a/mixlib/mix_vm_command.c b/mixlib/mix_vm_command.c
index 4f0295f..6eab3a2 100644
--- a/mixlib/mix_vm_command.c
+++ b/mixlib/mix_vm_command.c
@@ -96,6 +96,7 @@ DEC_FUN (cabp_);
DEC_FUN (weval_);
DEC_FUN (w2d_);
DEC_FUN (tracing_);
+DEC_FUN (timing_);
DEC_FUN (edit_);
DEC_FUN (compile_);
DEC_FUN (pedit_);
@@ -156,12 +157,15 @@ command_ commands_[] = {
{ "w2d", cmd_w2d_, N_("Convert a MIX word to its decimal value"),
"w2d WORD"},
{ "tracing", cmd_tracing_, N_("Turn on/off instruction tracing"),
- "tracing on|off"},
+ "tracing [on|off]"},
+ { "timing", cmd_timing_, N_("Turn on/off timing statistics"),
+ "timing [on|off]"},
{ NULL, NULL, NULL, NULL},
};
/* configuration keys */
static const gchar *TRACING_KEY_ = "Tracing";
+static const gchar *TIMING_KEY_ = "Timing";
static const gchar *EDITOR_KEY_ = "Editor";
static const gchar *ASM_KEY_ = "Assembler";
@@ -251,6 +255,8 @@ mix_vm_cmd_dispatcher_new_with_config (FILE *out, FILE *err,
if (val) mix_vm_cmd_dispatcher_set_editor (result, val);
val = mix_config_get (result->config, ASM_KEY_);
if (val) mix_vm_cmd_dispatcher_set_assembler (result, val);
+ val = mix_config_get (result->config, TIMING_KEY_);
+ if (val) cmd_timing_ (result, val);
}
return result;
}
@@ -1326,17 +1332,48 @@ cmd_tracing_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg)
dis->trace = FALSE;
if (dis->config) mix_config_update (dis->config, TRACING_KEY_, OFF);
}
- else
+ else if (arg && !strlen (arg))
+ {
+ fprintf (dis->out, "Instruction tracing is currently set %s\n",
+ dis->trace ? "ON" : "OFF");
+ }
+ else
cmd_help_ (dis, "tracing");
return TRUE;
}
static gboolean
+cmd_timing_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg)
+{
+ static const gchar *ON = "on";
+ static const gchar *OFF = "off";
+ if (arg && !strcmp (arg, ON))
+ {
+ dis->printtime = TRUE;
+ if (dis->config) mix_config_update (dis->config, TIMING_KEY_, ON);
+ }
+ else if (arg && !strcmp (arg, OFF))
+ {
+ dis->printtime = FALSE;
+ if (dis->config) mix_config_update (dis->config, TIMING_KEY_, OFF);
+ }
+ else if (arg && !strlen (arg))
+ {
+ fprintf (dis->out, "Instruction timing is currently set %s\n",
+ dis->printtime ? "ON" : "OFF");
+ }
+ else
+ cmd_help_ (dis, "timing");
+ return TRUE;
+}
+
+
+static gboolean
cmd_pedit_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg)
{
const gchar *ed = mix_vm_cmd_dispatcher_get_editor (dis);
if (dis)
- fprintf (dis->out, "Edit command:%s\n", ed);
+ fprintf (dis->out, "Edit command: %s\n", ed);
else
fprintf (dis->out, "Edit command not set (use sedit)\n");
return TRUE;
@@ -1355,7 +1392,7 @@ cmd_pasm_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg)
{
const gchar *ed = mix_vm_cmd_dispatcher_get_assembler (dis);
if (dis)
- fprintf (dis->out, "Compile command:%s\n", ed);
+ fprintf (dis->out, "Compile command: %s\n", ed);
else
fprintf (dis->out, "Compile command not set (use sasm)\n");
return TRUE;
diff --git a/mixlib/mix_vm_command.h b/mixlib/mix_vm_command.h
index b1c6839..40bb7e8 100644
--- a/mixlib/mix_vm_command.h
+++ b/mixlib/mix_vm_command.h
@@ -41,7 +41,11 @@ typedef enum {
MIX_CMD_HELP = 0, /* echo help message */
MIX_CMD_LOAD, /* load a mix program */
MIX_CMD_EDIT, /* edit mixal source */
+ MIX_CMD_PEDIT, /* print editor command */
+ MIX_CMD_SEDIT, /* set editor command*/
MIX_CMD_COMPILE, /* compile mixal source */
+ MIX_CMD_PASM, /* print compiler command */
+ MIX_CMD_SASM, /* set assembler command */
MIX_CMD_RUN, /* run a loaded program */
MIX_CMD_NEXT, /* run next instruction */
MIX_CMD_LOC, /* print location pointer */
@@ -62,7 +66,8 @@ typedef enum {
MIX_CMD_CABP, /* clear all breakpoints */
MIX_CMD_WEVAL, /* evaluate a w-expression */
MIX_CMD_W2D, /* print word in decimal notation */
- MIX_CMD_TRACE, /* enable/disable instruction traces */
+ MIX_CMD_TRACING, /* enable/disable instruction traces */
+ MIX_CMD_TIMING, /* enable/disable timing statistics */
MIX_CMD_INVALID, /* invalid command identifier */
} mix_vm_command_t;