From a8edc2496b37622374ee1077a508265545bc015f Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 19 Feb 2020 08:25:39 +0100 Subject: Put fixtures in a list, not in top-level variables This avoids problems if the fixtures have names which overlap with things. --- src/scheme.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/scheme.c b/src/scheme.c index b2a0771..d37578f 100644 --- a/src/scheme.c +++ b/src/scheme.c @@ -42,6 +42,14 @@ static SCM set_intensity(SCM fixture_scm, SCM intensity_scm) } +static SCM fixture_name(SCM fixture_scm) +{ + scm_assert_foreign_object_type(fixture_type, fixture_scm); + struct fixture *fixture = scm_foreign_object_ref(fixture_scm, 0); + return scm_from_utf8_symbol(fixture->label); +} + + static void finalize_fixture(SCM fixture) { printf("finalise fixture!\n"); @@ -54,17 +62,22 @@ void *register_scheme_funcs(void *data) SCM name, slots; int i; scm_t_struct_finalize finalizer; + SCM fixture_list; name = scm_from_utf8_symbol("fixture"); slots = scm_list_1(scm_from_utf8_symbol("data")); finalizer = finalize_fixture; fixture_type = scm_make_foreign_object_type(name, slots, finalizer); + fixture_list = SCM_EOL; for ( i=0; in_fixtures; i++ ) { SCM obj = scm_make_foreign_object_1(fixture_type, &nl->fixtures[i]); - scm_define(scm_from_utf8_symbol(nl->fixtures[i].label), obj); + SCM obj_list = scm_list_1(obj); + fixture_list = scm_append(scm_list_2(fixture_list, obj_list)); } + scm_define(scm_from_utf8_symbol("fixtures"), fixture_list); + scm_c_define_gsubr("fixture-name", 1, 0, 0, &fixture_name); scm_c_define_gsubr("set-intensity", 2, 0, 0, &set_intensity); return NULL; -- cgit v1.2.3