diff options
Diffstat (limited to 'mixlib')
-rw-r--r-- | mixlib/mix_config.c | 26 | ||||
-rw-r--r-- | mixlib/mix_device.c | 5 | ||||
-rw-r--r-- | mixlib/mix_device.h | 3 | ||||
-rw-r--r-- | mixlib/mix_vm_command.c | 31 | ||||
-rw-r--r-- | mixlib/mix_vm_command.h | 1 |
5 files changed, 63 insertions, 3 deletions
diff --git a/mixlib/mix_config.c b/mixlib/mix_config.c index d03e949..871af91 100644 --- a/mixlib/mix_config.c +++ b/mixlib/mix_config.c @@ -34,6 +34,7 @@ static const gchar *DEF_DIR_ = ".mdk"; static const gchar *AUTOSAVE_KEY_ = "Autosave"; static const gchar *AUTOSAVE_YES_ = "True"; static const gchar *AUTOSAVE_NO_ = "False"; +static const gchar *DEVICES_KEY_ = "DevicesDir"; /* the config type */ struct mix_config_t @@ -106,6 +107,14 @@ mix_config_delete (mix_config_t *config) g_free (config); } +/* get the config filename */ +const gchar * +mix_config_get_filename (const mix_config_t *config) +{ + g_return_val_if_fail (config != NULL, NULL); + return config->filename; +} + /* get a config item's value from its key */ const gchar * mix_config_get (const mix_config_t *config, const gchar *key) @@ -183,3 +192,20 @@ mix_config_is_autosave (const mix_config_t *config) return config->autosave; } +/* devices dir*/ +void +mix_config_set_devices_dir (mix_config_t *config, const gchar *dirname) +{ + g_return_if_fail (config != NULL); + g_return_if_fail (dirname != NULL); + if (mix_stat_dir (dirname, "devices")) + mix_config_update (config, DEVICES_KEY_, dirname); +} + +extern const gchar * +mix_config_get_devices_dir (const mix_config_t *config) +{ + g_return_val_if_fail (config != NULL, NULL); + return mix_config_get (config, DEVICES_KEY_); +} + diff --git a/mixlib/mix_device.c b/mixlib/mix_device.c index d40ea98..e50896d 100644 --- a/mixlib/mix_device.c +++ b/mixlib/mix_device.c @@ -39,6 +39,11 @@ mix_device_set_dir (const gchar *dirname) return FALSE; } +const gchar * +mix_device_get_dir (void) +{ + return DEV_DIR_; +} mix_device_t * mix_device_new (mix_device_type_t type) diff --git a/mixlib/mix_device.h b/mixlib/mix_device.h index 9f37092..d8b604b 100644 --- a/mixlib/mix_device.h +++ b/mixlib/mix_device.h @@ -76,6 +76,9 @@ typedef enum { extern gboolean mix_device_set_dir (const gchar *dirname); +extern const gchar * +mix_device_get_dir (void); + /* Create a new device with default name and given type. */ diff --git a/mixlib/mix_vm_command.c b/mixlib/mix_vm_command.c index 6eab3a2..afabc55 100644 --- a/mixlib/mix_vm_command.c +++ b/mixlib/mix_vm_command.c @@ -27,10 +27,11 @@ #include <ctype.h> #include <errno.h> -#include "mix_vm_command.h" +#include "mix_device.h" #include "mix_vm.h" #include "mix_vm_dump.h" #include "mix_eval.h" +#include "mix_vm_command.h" /* hooks */ typedef struct @@ -103,6 +104,7 @@ DEC_FUN (pedit_); DEC_FUN (sedit_); DEC_FUN (pasm_); DEC_FUN (sasm_); +DEC_FUN (devdir_); /* internal command info struct */ typedef struct { @@ -160,6 +162,8 @@ command_ commands_[] = { "tracing [on|off]"}, { "timing", cmd_timing_, N_("Turn on/off timing statistics"), "timing [on|off]"}, + { "devdir", cmd_devdir_, N_("Print/set devices directory"), + "devdir [NEWDIR]"}, { NULL, NULL, NULL, NULL}, }; @@ -257,6 +261,15 @@ mix_vm_cmd_dispatcher_new_with_config (FILE *out, FILE *err, if (val) mix_vm_cmd_dispatcher_set_assembler (result, val); val = mix_config_get (result->config, TIMING_KEY_); if (val) cmd_timing_ (result, val); + val = mix_config_get_devices_dir (result->config); + if (!val) + { + gchar *dirname = g_dirname (mix_config_get_filename (config)); + cmd_devdir_ (result, dirname); + g_free (dirname); + } + else + cmd_devdir_ (result, val); } return result; } @@ -1359,8 +1372,7 @@ cmd_timing_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg) } else if (arg && !strlen (arg)) { - fprintf (dis->out, "Instruction timing is currently set %s\n", - dis->printtime ? "ON" : "OFF"); + print_time_ (dis); } else cmd_help_ (dis, "timing"); @@ -1405,3 +1417,16 @@ cmd_sasm_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg) mix_vm_cmd_dispatcher_set_assembler (dis, arg); return TRUE; } + +static gboolean +cmd_devdir_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg) +{ + if (!arg || !strlen (arg)) + fprintf (dis->out, "Device directory: %s\n", mix_device_get_dir ()); + else if (mix_device_set_dir (arg) && dis->config) + mix_config_set_devices_dir (dis->config, arg); + return TRUE; +} + + + diff --git a/mixlib/mix_vm_command.h b/mixlib/mix_vm_command.h index 40bb7e8..45e2c8c 100644 --- a/mixlib/mix_vm_command.h +++ b/mixlib/mix_vm_command.h @@ -68,6 +68,7 @@ typedef enum { MIX_CMD_W2D, /* print word in decimal notation */ MIX_CMD_TRACING, /* enable/disable instruction traces */ MIX_CMD_TIMING, /* enable/disable timing statistics */ + MIX_CMD_DEVDIR, /* print/set device directory */ MIX_CMD_INVALID, /* invalid command identifier */ } mix_vm_command_t; |