diff options
Diffstat (limited to 'mixutils')
-rw-r--r-- | mixutils/mixvm_command.c | 58 |
1 files changed, 13 insertions, 45 deletions
diff --git a/mixutils/mixvm_command.c b/mixutils/mixvm_command.c index e1c03bf..8030eed 100644 --- a/mixutils/mixvm_command.c +++ b/mixutils/mixvm_command.c @@ -47,8 +47,6 @@ static int cmd_##name (char *arg) DEC_FUN (help_); DEC_FUN (shell_); -DEC_FUN (compile_); -DEC_FUN (edit_); DEC_FUN (quit_); /* A structure which contains information on the commands this program @@ -63,8 +61,6 @@ typedef struct { COMMAND commands[] = { { "help", cmd_help_, N_("Display this text"), "help [COMMAND]" }, { "shell", cmd_shell_, N_("Execute shell command"), "shell COMMAND" }, - { "compile", cmd_compile_, N_("Compile a source file"), "compile FILENAME"}, - { "edit", cmd_edit_, N_("Edit a source file"), "edit FILENAME"}, { "quit", cmd_quit_, N_("Quit the program"), "quit" }, { (char *)NULL, (Function *)NULL, (char *)NULL } }; @@ -224,33 +220,17 @@ cmd_shell_ (char *arg) return TRUE; } -static int -cmd_compile_ (char *arg) -{ - gchar *line; - - if ( strlen (arg) == 0 ) - return cmd_help_ ("compile"); - - line = g_strconcat ("mixasm -g ", arg, NULL); - if ( system (line) == EXIT_SUCCESS ) - fputs (_("Successful compilation\n"), stderr); - g_free (line); - - return TRUE; -} - -static int -cmd_edit_ (char *arg) + +/* external interface */ +static void +init_dis_ (mix_vm_cmd_dispatcher_t *dis) { static const gchar * envars[] = { "MDK_EDITOR", "X_EDITOR", "EDITOR", "VISUAL" }; static const guint s = sizeof (envars) / sizeof (envars[0]); static const gchar *editor = NULL; - - if ( strlen (arg) == 0 ) - return cmd_help_ ("edit"); + gchar *edit = NULL; if (!editor) { @@ -258,27 +238,13 @@ cmd_edit_ (char *arg) for (k = 0; k < s; k++) if ( (editor = getenv (envars[k])) != NULL ) break; } - if (!editor) - { - int k; - fputs (_("Cannot find editor ("), stderr); - for (k = 0; k < s; k++) - fprintf (stderr, "%s ", envars[k]); - fputs (_("undefined)\n"), stderr); - } - else - { - gchar *line = g_strconcat (editor, " ", arg, NULL); - system (line); - g_free (line); - } - - return TRUE; + if (!editor) editor = "vi"; + edit = g_strconcat (editor, " %s", NULL); + mix_vm_cmd_dispatcher_set_editor (dis, edit); + g_free (edit); + mix_vm_cmd_dispatcher_set_assembler (dis, "mixasm -g %s"); } - - -/* external interface */ void mixvm_cmd_init (char *arg, gboolean use_emacs) { @@ -302,6 +268,8 @@ mixvm_cmd_init (char *arg, gboolean use_emacs) if ( dis_ == NULL) g_error (_("Failed initialisation (no memory resources)")); + init_dis_ (dis_); + /* install post hook for emacs interaction */ if (use_emacs) { @@ -309,7 +277,7 @@ mixvm_cmd_init (char *arg, gboolean use_emacs) mix_vm_cmd_dispatcher_post_hook (dis_, MIX_CMD_RUN, emacs_output_, NULL); mix_vm_cmd_dispatcher_post_hook (dis_, MIX_CMD_NEXT, emacs_output_, NULL); } - + if (arg) mix_vm_cmd_dispatcher_dispatch (dis_, MIX_CMD_LOAD, arg); } |