diff options
-rw-r--r-- | mixlib/mix_vm_command.c | 45 | ||||
-rw-r--r-- | mixlib/mix_vm_command.h | 7 |
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; |