diff options
Diffstat (limited to 'mixutils')
-rw-r--r-- | mixutils/mixvm.c | 21 | ||||
-rw-r--r-- | mixutils/mixvm_command.c | 30 | ||||
-rw-r--r-- | mixutils/mixvm_command.h | 4 | ||||
-rw-r--r-- | mixutils/mixvm_loop.c | 32 |
4 files changed, 43 insertions, 44 deletions
diff --git a/mixutils/mixvm.c b/mixutils/mixvm.c index d2d64c3..81b1fa2 100644 --- a/mixutils/mixvm.c +++ b/mixutils/mixvm.c @@ -37,7 +37,7 @@ extern void mix_vmloop (const gchar *code_file, gboolean use_emacs); -static void +extern void mix_vmrun (const gchar *code_file, gboolean dump); enum { @@ -137,24 +137,5 @@ main (int argc, char **argv) } -static void -mix_vmrun (const gchar *code_file, gboolean dump) -{ - mix_vm_t *vm = mix_vm_new (); - if (!mix_vm_load_file (vm, code_file)) { - fprintf (stderr, _("Error loading %s file\n"), code_file); - return; - } - mix_vm_run (vm); - printf (_("** Execution time: %ld\n"), mix_vm_get_uptime (vm)); - if (dump) { - mix_dump_context_t *dc = mix_dump_context_new (MIX_DUMP_DEF_CHANNEL, - 0, 0, - MIX_DUMP_ALL_NOMEM); - mix_vm_dump (vm, dc); - mix_dump_context_delete (dc); - } - mix_vm_delete (vm); -} diff --git a/mixutils/mixvm_command.c b/mixutils/mixvm_command.c index 8030eed..b8bef53 100644 --- a/mixutils/mixvm_command.c +++ b/mixutils/mixvm_command.c @@ -173,33 +173,23 @@ cmd_help_ (char *arg) int i; int printed = 0; - for (i = 0; commands[i].name; i++) + for (i = 1; commands[i].name; i++) { - if (!*arg || (strcmp (arg, commands[i].name) == 0)) + if (!arg || !*arg) { - printf (_("%s\t\t%s. Usage: %s\n"), commands[i].name, - _(commands[i].doc), commands[i].usage); + printf (_("%s\t\t%s.\n"), commands[i].name, _(commands[i].doc)); printed++; } - } - - if (printed > 1) printf ("\n"); - - for (i = LOCAL_COMANDS_NO_ + 1 /* skip help cmd */; mix_commands_[i]; i++) - { - if (!*arg || (strcmp (arg, mix_commands_[i]) == 0)) + else if (strcmp (arg, commands[i].name) == 0) { - printf (_("%s\t\t%s. Usage: %s\n"), mix_commands_[i], - mix_vm_command_help (i - LOCAL_COMANDS_NO_), - mix_vm_command_usage (i - LOCAL_COMANDS_NO_)); + printf (_("%s\t\t%s.\nUsage:\t\t%s\n"), commands[i].name, + _(commands[i].doc), commands[i].usage); printed++; } } - - if (!printed) printf ("Command \'%s\' not found\n", arg); - + if (!printed ||!arg || !*arg) + mix_vm_cmd_dispatcher_dispatch (dis_, MIX_CMD_HELP, arg); return TRUE; - } static int @@ -246,7 +236,7 @@ init_dis_ (mix_vm_cmd_dispatcher_t *dis) } void -mixvm_cmd_init (char *arg, gboolean use_emacs) +mixvm_cmd_init (mix_config_t *config, char *arg, gboolean use_emacs) { int k; /* get local command names */ @@ -263,7 +253,7 @@ mixvm_cmd_init (char *arg, gboolean use_emacs) #endif /* HAVE_LIBREADLINE */ /* initialise the dispatcher */ - dis_ = mix_vm_cmd_dispatcher_new (stdout, stderr); + dis_ = mix_vm_cmd_dispatcher_new_with_config (stdout, stderr, config); if ( dis_ == NULL) g_error (_("Failed initialisation (no memory resources)")); diff --git a/mixutils/mixvm_command.h b/mixutils/mixvm_command.h index 9741164..f4fdea8 100644 --- a/mixutils/mixvm_command.h +++ b/mixutils/mixvm_command.h @@ -23,10 +23,10 @@ #ifndef MIXVM_COMMAND_H #define MIXVM_COMMAND_H -#include <glib.h> +#include <mixlib/mix_config.h> extern void -mixvm_cmd_init (char *arg, gboolean use_emacs); +mixvm_cmd_init (mix_config_t *config, char *arg, gboolean use_emacs); extern gboolean mixvm_cmd_exec (char *line); diff --git a/mixutils/mixvm_loop.c b/mixutils/mixvm_loop.c index 89a3953..ad49829 100644 --- a/mixutils/mixvm_loop.c +++ b/mixutils/mixvm_loop.c @@ -23,6 +23,10 @@ #include <stdio.h> #include <mixlib/mix.h> +#include <mixlib/mix_config.h> +#include <mixlib/mix_vm.h> +#include <mixlib/mix_device.h> +#include <mixlib/mix_vm_dump.h> #include "mixvm_command.h" #ifdef HAVE_LIBHISTORY @@ -46,7 +50,9 @@ readline (char *prompt) /* A static variable for holding the line. */ static char *line_read = (char *)NULL; + static const char *PROMPT = N_("MIX > "); +static const char *CONFIG_FILE_ = "mixvm.config"; /* Read a string, and return a pointer to it. Returns NULL on EOF. */ static char * @@ -75,9 +81,31 @@ rl_gets () void mix_vmloop (const gchar *file, gboolean use_emacs) { - mixvm_cmd_init ((char *)file, use_emacs); + mix_config_t *config = mix_config_new (NULL, CONFIG_FILE_); + mix_config_set_autosave (config, TRUE); + mixvm_cmd_init (config, (char *)file, use_emacs); while ( mixvm_cmd_exec (rl_gets ()) ) ; + if (config) mix_config_delete (config); } - +/* run a program and exit */ +void +mix_vmrun (const gchar *code_file, gboolean dump) +{ + mix_vm_t *vm = mix_vm_new (); + if (!mix_vm_load_file (vm, code_file)) { + fprintf (stderr, _("Error loading %s file\n"), code_file); + return; + } + mix_vm_run (vm); + printf (_("** Execution time: %ld\n"), mix_vm_get_uptime (vm)); + if (dump) { + mix_dump_context_t *dc = mix_dump_context_new (MIX_DUMP_DEF_CHANNEL, + 0, 0, + MIX_DUMP_ALL_NOMEM); + mix_vm_dump (vm, dc); + mix_dump_context_delete (dc); + } + mix_vm_delete (vm); +} |