summaryrefslogtreecommitdiffhomepage
path: root/mixutils
diff options
context:
space:
mode:
Diffstat (limited to 'mixutils')
-rw-r--r--mixutils/mixvm.c21
-rw-r--r--mixutils/mixvm_command.c30
-rw-r--r--mixutils/mixvm_command.h4
-rw-r--r--mixutils/mixvm_loop.c32
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);
+}