diff --git a/pd/src/x_connective.c b/pd/src/x_connective.c index ba523a9c7020d3a40d8323f90d9fc658fd7b1012..c619c346b5ba8ac5f9741bde4f7f3325d6feeab4 100644 --- a/pd/src/x_connective.c +++ b/pd/src/x_connective.c @@ -471,7 +471,7 @@ static void *select_new(t_symbol *s, int argc, t_atom *argv) for (n = 0, e = x->x_vec; n < argc; n++, e++) { e->e_outlet = outlet_new(&x->x_obj, &s_bang); - if (argv[n].a_type == A_FLOAT) + if (argv[0].a_type == A_FLOAT) { SETFLOAT(&e->e_atom, atom_getfloatarg(n, argc, argv)); f = 1; @@ -515,12 +515,20 @@ void select_setup(void) static t_class *route_class; +static t_class *route_proxy_class; + typedef struct _routeelement { t_word e_w; t_outlet *e_outlet; } t_routeelement; +typedef struct _route_proxy +{ + t_pd l_pd; + void *parent; +} t_route_proxy; + typedef struct _route { t_object x_obj; @@ -528,8 +536,29 @@ typedef struct _route t_int x_nelement; t_routeelement *x_vec; t_outlet *x_rejectout; + t_route_proxy x_pxy; } t_route; +static void route_proxy_init(t_route_proxy *x, t_route *p) +{ + x->l_pd = route_proxy_class; + x->parent = (void *)p; +} + +static void route_proxy_float(t_route_proxy *x, t_float f) +{ + t_route *p = (t_route *)x->parent; + p->x_type = A_FLOAT; + p->x_vec->e_w.w_float = f; +} + +static void route_proxy_symbol(t_route_proxy *x, t_symbol *s) +{ + t_route *p = (t_route *)x->parent; + p->x_type = A_SYMBOL; + p->x_vec->e_w.w_symbol = s; +} + static void route_anything(t_route *x, t_symbol *sel, int argc, t_atom *argv) { t_routeelement *e; @@ -654,9 +683,12 @@ static void *route_new(t_symbol *s, int argc, t_atom *argv) } if (argc == 1) { - if (argv->a_type == A_FLOAT) + route_proxy_init(&x->x_pxy, x); + inlet_new(&x->x_obj, &x->x_pxy.l_pd, 0, 0); + /*if (argv->a_type == A_FLOAT) floatinlet_new(&x->x_obj, &x->x_vec->e_w.w_float); - else symbolinlet_new(&x->x_obj, &x->x_vec->e_w.w_symbol); + else + symbolinlet_new(&x->x_obj, &x->x_vec->e_w.w_symbol);*/ } x->x_rejectout = outlet_new(&x->x_obj, &s_list); return (x); @@ -664,6 +696,10 @@ static void *route_new(t_symbol *s, int argc, t_atom *argv) void route_setup(void) { + route_proxy_class = class_new(gensym("route_inlet"), + 0, 0, sizeof(t_route_proxy), 0, 0); + class_addfloat(route_proxy_class, (t_method)route_proxy_float); + class_addsymbol(route_proxy_class, (t_method)route_proxy_symbol); route_class = class_new(gensym("route"), (t_newmethod)route_new, (t_method)route_free, sizeof(t_route), 0, A_GIMME, 0); class_addlist(route_class, route_list);