summaryrefslogtreecommitdiffhomepage
path: root/mixguile/xmixguile_cmd_dispatcher.c
diff options
context:
space:
mode:
Diffstat (limited to 'mixguile/xmixguile_cmd_dispatcher.c')
-rw-r--r--mixguile/xmixguile_cmd_dispatcher.c60
1 files changed, 49 insertions, 11 deletions
diff --git a/mixguile/xmixguile_cmd_dispatcher.c b/mixguile/xmixguile_cmd_dispatcher.c
index 744b76b..5590e5f 100644
--- a/mixguile/xmixguile_cmd_dispatcher.c
+++ b/mixguile/xmixguile_cmd_dispatcher.c
@@ -267,6 +267,50 @@ mix_set_cmp_ (SCM value)
return gh_symbol2scm ("ok");
}
+static SCM
+mix_basename_ (const gchar *path)
+{
+ SCM result;
+ gchar *name;
+ if (!path) return gh_str02scm ("");
+ SCM_DEFER_INTS;
+ name = g_basename (path);
+ result = gh_str02scm (name);
+ g_free (name);
+ SCM_ALLOW_INTS;
+ return gh_str02scm (name);
+}
+
+static SCM
+mix_src_name_ (void)
+{
+ return
+ mix_basename_ (mix_vm_cmd_dispatcher_get_src_file_path (vm_dispatcher_));
+}
+
+static SCM
+mix_src_path_ (void)
+{
+ const gchar *path = mix_vm_cmd_dispatcher_get_src_file_path (vm_dispatcher_);
+ return gh_str02scm (path? (char *)path : "");
+}
+
+static SCM
+mix_prog_name_ (void)
+{
+ return
+ mix_basename_ (mix_vm_cmd_dispatcher_get_program_path (vm_dispatcher_));
+}
+
+static SCM
+mix_prog_path_ (void)
+{
+ const gchar *path = mix_vm_cmd_dispatcher_get_program_path (vm_dispatcher_);
+ return gh_str02scm (path? (char *)path : "");
+}
+
+
+
/* ----- hook functions ---- */
/* auxiliar arg list maker */
static SCM
@@ -288,18 +332,8 @@ make_arg_list_ (const gchar *arg)
/* command hook auxiliar functions and types */
/*
static SCM
-hook_error_handler_ (void *data, SCM tag, SCM args)
-{
- int len;
- mix_vm_cmd_dispatcher_t *dis = (mix_vm_cmd_dispatcher_t *)dis;
- gchar *argstr = gh_scm2newstr (args, &len);
- fprintf (mix_vm_cmd_dispatcher_get_err_stream (dis), "Error in hook: %s\n",
- argstr);
- g_free (argstr);
- return SCM_BOOL_T;
-}
+hook_error_handler_ (void *data, SCM tag, SCM args){}
*/
-
typedef struct
{
SCM function;
@@ -430,6 +464,10 @@ const scm_command_t DEFAULT_SCM_COMMANDS_[] = {
{"mix-loc", mix_loc_, 0, 0, 0},
{"mix-set-over!", mix_set_over_, 1, 0, 0},
{"mix-cmp", mix_cmp_, 0, 0, 0},
+ {"mix-prog-name", mix_prog_name_, 0, 0, 0},
+ {"mix-prog-path", mix_prog_path_, 0, 0, 0},
+ {"mix-src-name", mix_src_name_, 0, 0, 0},
+ {"mix-src-path", mix_src_path_, 0, 0, 0},
{"mix-set-cmp!", mix_set_cmp_, 1, 0, 0},
{"mix-add-pre-hook", mix_add_pre_hook_, 2, 0, 0},
{"mix-add-post-hook", mix_add_post_hook_, 2, 0, 0},