diff options
Diffstat (limited to 'mixlib/mix_vm_command.c')
-rw-r--r-- | mixlib/mix_vm_command.c | 62 |
1 files changed, 49 insertions, 13 deletions
diff --git a/mixlib/mix_vm_command.c b/mixlib/mix_vm_command.c index 49f7d1d..1ef0d7e 100644 --- a/mixlib/mix_vm_command.c +++ b/mixlib/mix_vm_command.c @@ -1,7 +1,7 @@ /* -*-c-*- -------------- mix_vm_command.c : * Implementation of the functions declared in mix_vm_command.h * ------------------------------------------------------------------ - * Last change: Time-stamp: "01/02/26 03:29:19 jose" + * Last change: Time-stamp: "01/03/10 03:21:33 jose" * ------------------------------------------------------------------ * Copyright (C) 2001 Free Software Foundation, Inc. * @@ -53,8 +53,10 @@ struct mix_vm_cmd_dispatcher_t mix_dump_context_t *dump; /* dump context for output */ mix_eval_t *eval; /* evaluator for w-expressions */ gboolean trace; /* tracing flag */ + gboolean printtime; /* printing times flag */ mix_time_t uptime; /* total running time */ - mix_time_t laptime; /* current program running time */ + mix_time_t laptime; /* last run time */ + mix_time_t progtime; /* current program running time */ hook_ pre_hooks[MIX_CMD_INVALID]; /* Pre-command hooks */ hook_ post_hooks[MIX_CMD_INVALID]; /* Post-command hooks */ global_hook_ global_pre; /* global pre-command hook */ @@ -188,7 +190,8 @@ mix_vm_cmd_dispatcher_new (FILE *out_fd, /* output messages file */ result = g_new (mix_vm_cmd_dispatcher_t, 1); result->out = out_fd; result->err = err_fd; - result->uptime = result->laptime = 0; + result->uptime = result->laptime = result->progtime = 0; + result->printtime = TRUE; result->trace = FALSE; result->eval = mix_eval_new (); result->dump = mix_dump_context_new (out_fd, @@ -320,6 +323,38 @@ mix_vm_cmd_dispatcher_dispatch_text (mix_vm_cmd_dispatcher_t *dis, return result; } +/* get total uptime */ +mix_time_t +mix_vm_cmd_dispatcher_get_uptime (const mix_vm_cmd_dispatcher_t *dis) +{ + g_return_val_if_fail (dis != NULL, 0); + return dis->uptime; +} + +/* get program total time */ +mix_time_t +mix_vm_cmd_dispatcher_get_progtime (const mix_vm_cmd_dispatcher_t *dis) +{ + g_return_val_if_fail (dis != NULL, 0); + return dis->progtime; +} + +/* get time lapse */ +mix_time_t +mix_vm_cmd_dispatcher_get_laptime (const mix_vm_cmd_dispatcher_t *dis) +{ + g_return_val_if_fail (dis != NULL, 0); + return dis->laptime; +} + +/* toggle time printing */ +void +mix_vm_cmd_dispatcher_print_time (mix_vm_cmd_dispatcher_t * dis, gboolean print) +{ + g_return_if_fail (dis != NULL); + dis->printtime = print; +} + /* get the mix vm */ const mix_vm_t * mix_vm_cmd_dispatcher_get_vm (const mix_vm_cmd_dispatcher_t *dis) @@ -350,7 +385,7 @@ trace_ (mix_vm_cmd_dispatcher_t *dis) if (b > 0) line = mix_src_file_get_line (file, b); } - fprintf (dis->out, "%d: [%s]\t%s", (gint)loc, STRINS, line); + fprintf (dis->out, "%d: [%-15s]\t%s", (gint)loc, STRINS, line); } /* run a program tracing executed instructions */ @@ -372,12 +407,13 @@ run_and_trace_ (mix_vm_cmd_dispatcher_t *dis) static void print_time_ (mix_vm_cmd_dispatcher_t *dis) { - mix_time_t lapse = mix_vm_get_uptime(dis->vm) - dis->uptime; - dis->uptime += lapse; - dis->laptime += lapse; - fprintf( dis->out, - _("Elapsed time: %ld /Total program time: %ld (Total uptime: %ld)\n"), - lapse, dis->laptime, dis->uptime); + dis->laptime = mix_vm_get_uptime(dis->vm) - dis->uptime; + dis->uptime += dis->laptime; + dis->progtime += dis->laptime; + if (dis->printtime) + fprintf( dis->out, + _("Elapsed time: %ld /Total program time: %ld (Total uptime: %ld)\n"), + dis->laptime, dis->progtime, dis->uptime); } @@ -450,7 +486,7 @@ cmd_load_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg) fprintf (dis->out, _("Program loaded. Start address: %d\n"), mix_vm_get_prog_count (dis->vm)); - dis->laptime = 0; + dis->laptime = dis->progtime = 0; return TRUE; } @@ -465,7 +501,7 @@ cmd_run_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg) if (mix_vm_is_halted (dis->vm)) { mix_vm_reset_program (dis->vm); - dis->laptime = 0; + dis->laptime = dis->progtime = 0; } switch (run_and_trace_ (dis)) @@ -519,7 +555,7 @@ cmd_next_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg) if (mix_vm_is_halted (dis->vm)) { mix_vm_reset_program (dis->vm); - dis->laptime = 0; + dis->laptime = dis->progtime = 0; } while ( ins_no-- > 0 ) |