summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2023-04-16 15:11:02 +0200
committerThomas White <taw@physics.org>2023-04-16 15:51:41 +0200
commita4757aef677eac2e991db7e72fecc14a68bb1770 (patch)
treedfe86e41c861f2046ace6e6f3bfa79c1673ab6c0
parentd4b254d0247b5f76d4dd80191029fc30fadcb177 (diff)
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.
-rw-r--r--guile-osc.c29
-rw-r--r--meson.build2
-rw-r--r--open-sound-control/api.scm (renamed from guile-osc/engine.scm)11
-rw-r--r--open-sound-control/server-thread.scm24
4 files changed, 46 insertions, 20 deletions
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 <lo/lo.h>
-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/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/guile-osc/engine.scm b/open-sound-control/api.scm
index 7c8310b..abd837c 100644
--- a/guile-osc/engine.scm
+++ b/open-sound-control/api.scm
@@ -1,7 +1,7 @@
;;
-;; guile-osc/engine.scm
+;; open-sound-control/api.scm
;;
-;; Copyright © 2023 Thomas White <taw@bitwiz.org.uk>
+;; Copyright © 2023 Thomas White <taw@bitwiz.me.uk>
;;
;; This file is part of Guile-OSC.
;;
@@ -18,9 +18,10 @@
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
-(define-module (guile-osc engine)
- #:export (start-osc
- define-osc-method))
+(define-module (open-sound-control api)
+ #:export (make-osc-server-thread
+ add-osc-method))
+
(if (not (provided? 'guile-osc))
(load-extension "libguile-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 <taw@bitwiz.me.uk>
+;;
+;; 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 <http://www.gnu.org/licenses/>.
+;;
+(define-module (open-sound-control server-thread)
+ #:use-module (open-sound-control api)
+ #:re-export (make-osc-server-thread
+ add-osc-method))