diff options
Diffstat (limited to 'mixutils/mixvm_loop.c')
| -rw-r--r-- | mixutils/mixvm_loop.c | 32 | 
1 files changed, 30 insertions, 2 deletions
| 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); +} | 
