summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2023-04-22 11:40:19 +0200
committerThomas White <taw@physics.org>2023-04-22 11:40:19 +0200
commit5a60df03e8dda566c9006c20fd687f0d6c271cf2 (patch)
treedc5e9f75e8ee47e6a966a8e8eccc17ada0658620
parent5a77730c1a448928f03aba90d0b4e77355d352ed (diff)
Add almost all argument types
-rw-r--r--guile-osc.c44
1 files changed, 41 insertions, 3 deletions
diff --git a/guile-osc.c b/guile-osc.c
index c259788..d415715 100644
--- a/guile-osc.c
+++ b/guile-osc.c
@@ -110,18 +110,56 @@ static void *method_callback_with_guile(void *vp)
for ( i=0; i<data->argc; i++ ) {
switch ( types[i] ) {
- case 'f':
+ case LO_STRING:
+ args[i] = scm_from_utf8_string(&data->argv[i]->s);
+ break;
+
+ case LO_SYMBOL:
+ args[i] = scm_from_utf8_symbol(&data->argv[i]->S);
+ break;
+
+ case LO_INT32:
+ args[i] = scm_from_int32(data->argv[i]->i32);
+ break;
+
+ case LO_INT64:
+ args[i] = scm_from_int64(data->argv[i]->i64);
+ break;
+
+ case LO_FLOAT:
args[i] = scm_from_double(data->argv[i]->f);
break;
- case 'i':
- args[i] = scm_from_int(data->argv[i]->i);
+ case LO_DOUBLE:
+ args[i] = scm_from_double(data->argv[i]->d);
+ break;
+
+ case LO_CHAR:
+ args[i] = scm_from_uchar(data->argv[i]->c);
+ break;
+
+ case LO_TRUE:
+ args[i] = SCM_BOOL_T;
+ break;
+
+ case LO_FALSE:
+ args[i] = SCM_BOOL_F;
+ break;
+
+ case LO_NIL:
+ args[i] = SCM_EOL;
+ break;
+
+ case LO_INFINITUM:
+ args[i] = scm_inf();
break;
default:
fprintf(stderr, "Unrecognised argument type '%c'\n",
types[i]);
return NULL;
+
+ /* Notable omissions so far: LO_TIMETAG and LO_BLOB */
}
}
} else {