diff options
Diffstat (limited to 'snd-dac.c')
-rw-r--r-- | snd-dac.c | 24 |
1 files changed, 17 insertions, 7 deletions
@@ -2690,23 +2690,33 @@ static char *xen_player_to_string(xen_player *v) return(buf); } -Xen_wrap_print(xen_player, print_xen_player, xen_player_to_string) - #if HAVE_FORTH || HAVE_RUBY +Xen_wrap_print(xen_player, print_xen_player, xen_player_to_string) + static Xen g_xen_player_to_string(Xen obj) { char *vstr; Xen result; #define S_xen_player_to_string "player->string" - Xen_check_type(xen_is_player(obj), obj, 1, S_xen_player_to_string, "a player"); - vstr = xen_player_to_string(Xen_to_xen_player(obj)); result = C_string_to_Xen_string(vstr); free(vstr); return(result); } +#else +#if HAVE_SCHEME +static s7_pointer g_xen_player_to_string(s7_scheme *sc, s7_pointer args) +{ + char *vstr; + Xen result; + vstr = xen_player_to_string(Xen_to_xen_player(s7_car(args))); + result = C_string_to_Xen_string(vstr); + free(vstr); + return(result); +} +#endif #endif @@ -2754,11 +2764,11 @@ static bool s7_xen_player_equalp(void *obj1, void *obj2) (((xen_player *)obj1)->n == ((xen_player *)obj2)->n)); } -static Xen s7_xen_player_length(s7_scheme *sc, Xen player) +static s7_pointer s7_xen_player_length(s7_scheme *sc, s7_pointer args) { chan_info *cp; int index; - index = Xen_player_to_C_int(player); + index = Xen_player_to_C_int(s7_car(args)); cp = players[index]->chans[player_chans[index]]; return(C_llong_to_Xen_llong(current_samples(cp))); } @@ -2769,10 +2779,10 @@ static void init_xen_player(void) { #if HAVE_SCHEME xen_player_tag = s7_make_c_type(s7, "<player>"); - s7_c_type_set_print(s7, xen_player_tag, print_xen_player); s7_c_type_set_free(s7, xen_player_tag, free_xen_player); s7_c_type_set_equal(s7, xen_player_tag, s7_xen_player_equalp); s7_c_type_set_length(s7, xen_player_tag, s7_xen_player_length); + s7_c_type_set_to_string(s7, xen_player_tag, g_xen_player_to_string); #else #if HAVE_RUBY xen_player_tag = Xen_make_object_type("XenPlayer", sizeof(xen_player)); |