diff options
author | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2010-08-19 05:04:28 +0000 |
---|---|---|
committer | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2010-08-19 05:04:28 +0000 |
commit | 79096fd626b946efd6947fa94ab15d30bf003ba0 (patch) | |
tree | 9a10305d0ade28bb3f5139c37ab8fa76f4e603d4 /valve/valve.c | |
parent | 633eaa4b2350c00ddc1b338c357096a441944784 (diff) |
converted to new library template and debianized
svn path=/trunk/externals/ekext/; revision=13835
Diffstat (limited to 'valve/valve.c')
-rw-r--r-- | valve/valve.c | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/valve/valve.c b/valve/valve.c deleted file mode 100644 index a83808c..0000000 --- a/valve/valve.c +++ /dev/null @@ -1,123 +0,0 @@ -/* takes a map like 0 1 3 4 7 and a route. if the route and the input are */ -/* non-zero in the map, then the route is output from the object */ -#include "m_pd.h" -#include <math.h> -#include <string.h> -#define MAXENTRIES 512 -#define LASTENTRY 511 - -static t_class *valve_class; - -typedef struct _valve -{ - t_object x_obj; - - t_atom *map; - int bufsize; - - t_float input, router, max; - t_outlet *routed, *notrouted; - - int flush; -} t_valve; - -static void valve_map(t_valve *x, t_symbol *s, int n, t_atom *map) -{ - if (x->map) { - freebytes(x->map, x->bufsize * sizeof(t_atom)); - x->map = 0; - x->bufsize = 0; - } - - x->map = copybytes(map, n * sizeof(t_atom)); - x->bufsize = n; -} - -void valve_float(t_valve *x, t_floatarg fin) -{ - if (x->map) { - int arg, arga, argb; - arga = argb = 0; - float testa, testb; - testa = testb = 0; - x->input = fin; - arg = (int)x->input; - testa = fin < 0 ? 0 : atom_getfloatarg(arg, x->bufsize, x->map); - testb = x->router < 0 ? 0 : atom_getfloatarg(x->router, x->bufsize, x->map); - arga = (int)testa; - argb = (int)testb; - if(arga && argb) - { - outlet_float(x->routed, x->router); - } - else if (!argb) - { - outlet_float(x->notrouted, argb); - } - else if (!arga && argb) - { - outlet_float(x->notrouted, arga); - } - } -} - -void valve_set(t_valve *x, t_floatarg fmap, t_floatarg fval) -{ - if(fmap < x->bufsize && fmap >= 0) - { - int imap = (int)fmap; - SETFLOAT(&x->map[imap], fval); - x->max = fmap > x->max ? fmap : x->max; - } -} - -void valve_clear(t_valve *x) -{ - if (x->map) { - freebytes(x->map, x->bufsize * sizeof(t_atom)); - x->map = 0; - x->bufsize = 0; - } -} - -void valve_debug(t_valve *x) -{ - int i; - for(i=0;i<x->bufsize;i++) { - float element = atom_getfloatarg(i, x->bufsize, x->map); - post("element %d = %d", i, element); - } - post("max = %d", x->max); -} - -void *valve_new(t_floatarg f) -{ - t_valve *x = (t_valve *)pd_new(valve_class); - x->max = 0; - int i; - x->map = 0; - x->bufsize = 0; - - floatinlet_new(&x->x_obj, &x->router); - - x->routed = outlet_new(&x->x_obj, &s_float); - x->notrouted = outlet_new(&x->x_obj, &s_float); - return (void *)x; -} - -void valve_setup(void) -{ - valve_class = class_new(gensym("valve"), - (t_newmethod)valve_new, - 0, sizeof(t_valve), - 0, A_DEFFLOAT, 0); - post("|¬~¬~¬~¬~¬~¬valve~¬~¬~¬~¬~¬~¬|"); - post("|~>^^^integer map router^^^<¬|"); - post("|¬~¬~¬Edward Kelly 2007~¬~¬~¬|"); - - class_addfloat(valve_class, valve_float); - class_addmethod(valve_class, (t_method)valve_set, gensym("set"), A_DEFFLOAT, A_DEFFLOAT, 0); - class_addmethod(valve_class, (t_method)valve_map, gensym("map"), A_GIMME, 0); - class_addmethod(valve_class, (t_method)valve_clear, gensym("clear"), A_DEFFLOAT, 0); - class_addmethod(valve_class, (t_method)valve_debug, gensym("debug"), A_DEFFLOAT, 0); -} |