From a4757aef677eac2e991db7e72fecc14a68bb1770 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sun, 16 Apr 2023 15:11:02 +0200 Subject: Rearrange namespace (guile-osc engine) becomes (open-sound-control server-thread) to better match liblo's types. Later on, we could also have the non-threading server. This also makes the port number into a parameter for make-osc-server-thread. --- guile-osc.c | 29 +++++++++++++++-------------- guile-osc/engine.scm | 27 --------------------------- meson.build | 2 +- open-sound-control/api.scm | 28 ++++++++++++++++++++++++++++ open-sound-control/server-thread.scm | 24 ++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 42 deletions(-) delete mode 100644 guile-osc/engine.scm create mode 100644 open-sound-control/api.scm create mode 100644 open-sound-control/server-thread.scm diff --git a/guile-osc.c b/guile-osc.c index f6a5906..5e69738 100644 --- a/guile-osc.c +++ b/guile-osc.c @@ -26,7 +26,7 @@ #include -static SCM osc_server_type; +static SCM osc_server_thread_type; static SCM osc_method_type; @@ -36,18 +36,19 @@ static void error_callback(int num, const char *msg, const char *path) } -static SCM start_osc() +static SCM make_osc_server_thread(SCM port_obj) { - lo_server_thread srv = lo_server_thread_new("7770", error_callback); + const char *port = scm_to_utf8_stringn(port_obj, NULL); + lo_server_thread srv = lo_server_thread_new(port, error_callback); lo_server_thread_start(srv); - return scm_make_foreign_object_1(osc_server_type, srv); + return scm_make_foreign_object_1(osc_server_thread_type, srv); } -static void finalize_osc_server(SCM obj) +static void finalize_osc_server_thread(SCM obj) { lo_server_thread srv; - scm_assert_foreign_object_type(osc_server_type, obj); + scm_assert_foreign_object_type(osc_server_thread_type, obj); srv = scm_foreign_object_ref(obj, 0); lo_server_thread_free(srv); } @@ -99,14 +100,14 @@ static int method_callback(const char *path, const char *types, lo_arg **argv, } -static SCM define_osc_method(SCM server_obj, SCM path_obj, SCM proc) +static SCM add_osc_method(SCM server_obj, SCM path_obj, SCM proc) { lo_server_thread srv; lo_method method; char *path; struct method_callback_data *data; - scm_assert_foreign_object_type(osc_server_type, server_obj); + scm_assert_foreign_object_type(osc_server_thread_type, server_obj); srv = scm_foreign_object_ref(server_obj, 0); data = malloc(sizeof(struct method_callback_data)); @@ -126,18 +127,18 @@ void init_guile_osc() { SCM name, slots; - name = scm_from_utf8_symbol("OSCServer"); + name = scm_from_utf8_symbol("OSCServerThread"); slots = scm_list_1(scm_from_utf8_symbol("data")); - osc_server_type = scm_make_foreign_object_type(name, - slots, - finalize_osc_server); + osc_server_thread_type = scm_make_foreign_object_type(name, + slots, + finalize_osc_server_thread); name = scm_from_utf8_symbol("OSCMethod"); slots = scm_list_1(scm_from_utf8_symbol("data")); osc_method_type = scm_make_foreign_object_type(name, slots, NULL); - scm_c_define_gsubr("start-osc", 0, 0, 0, start_osc); - scm_c_define_gsubr("define-osc-method", 3, 0, 0, define_osc_method); + scm_c_define_gsubr("make-osc-server-thread", 1, 0, 0, make_osc_server_thread); + scm_c_define_gsubr("add-osc-method", 3, 0, 0, add_osc_method); scm_add_feature("guile-osc"); } diff --git a/guile-osc/engine.scm b/guile-osc/engine.scm deleted file mode 100644 index 7c8310b..0000000 --- a/guile-osc/engine.scm +++ /dev/null @@ -1,27 +0,0 @@ -;; -;; guile-osc/engine.scm -;; -;; Copyright © 2023 Thomas White -;; -;; This file is part of Guile-OSC. -;; -;; Guile-OSC is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. -;; -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see . -;; -(define-module (guile-osc engine) - #:export (start-osc - define-osc-method)) - -(if (not (provided? 'guile-osc)) - (load-extension "libguile-osc" - "init_guile_osc")) diff --git a/meson.build b/meson.build index 3c8f724..1ad5f2b 100644 --- a/meson.build +++ b/meson.build @@ -14,4 +14,4 @@ library('guile-osc', ['guile-osc.c'], dependencies: [guile_dep, lo_dep], install: true) -install_subdir('guile-osc', install_dir: guile_sitedir) +install_subdir('open-sound-control', install_dir: guile_sitedir) diff --git a/open-sound-control/api.scm b/open-sound-control/api.scm new file mode 100644 index 0000000..abd837c --- /dev/null +++ b/open-sound-control/api.scm @@ -0,0 +1,28 @@ +;; +;; open-sound-control/api.scm +;; +;; Copyright © 2023 Thomas White +;; +;; This file is part of Guile-OSC. +;; +;; Guile-OSC is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . +;; +(define-module (open-sound-control api) + #:export (make-osc-server-thread + add-osc-method)) + + +(if (not (provided? 'guile-osc)) + (load-extension "libguile-osc" + "init_guile_osc")) diff --git a/open-sound-control/server-thread.scm b/open-sound-control/server-thread.scm new file mode 100644 index 0000000..5ff23e2 --- /dev/null +++ b/open-sound-control/server-thread.scm @@ -0,0 +1,24 @@ +;; +;; open-sound-control/server-thread.scm +;; +;; Copyright © 2023 Thomas White +;; +;; This file is part of Guile-OSC. +;; +;; Guile-OSC is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . +;; +(define-module (open-sound-control server-thread) + #:use-module (open-sound-control api) + #:re-export (make-osc-server-thread + add-osc-method)) -- cgit v1.2.3