diff options
author | Thomas White <taw@physics.org> | 2023-04-22 11:40:19 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2023-04-22 11:40:19 +0200 |
commit | 5a60df03e8dda566c9006c20fd687f0d6c271cf2 (patch) | |
tree | dc5e9f75e8ee47e6a966a8e8eccc17ada0658620 | |
parent | 5a77730c1a448928f03aba90d0b4e77355d352ed (diff) |
Add almost all argument types
-rw-r--r-- | guile-osc.c | 44 |
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 { |