From e0267013c4de07cf495b4488a66181e4027d88a4 Mon Sep 17 00:00:00 2001 From: Thomas O Fredericks Date: Fri, 19 Jun 2009 17:00:34 +0000 Subject: Added a few externals to tof svn path=/trunk/externals/tof/; revision=11801 --- src/streamMinMax.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 src/streamMinMax.c (limited to 'src/streamMinMax.c') diff --git a/src/streamMinMax.c b/src/streamMinMax.c new file mode 100644 index 0000000..c2fb438 --- /dev/null +++ b/src/streamMinMax.c @@ -0,0 +1,107 @@ +#include "m_pd.h" + +static t_class *streamMinMax_class; + +typedef struct _streamMinMax { + t_object x_obj; + + t_float min; + t_float max; + t_int reset; + //t_outlet *f_out, *b_out; + t_outlet* outlet1; + t_outlet* outlet2; +} t_streamMinMax; + +void streamMinMax_float(t_streamMinMax *x, t_float f) +{ + + if ( x->reset) { + x->min = f; + x->max = f; + x->reset = 0; + } else { + if (f < x->min) x->min = f; + if (f > x->max) x->max = f; + } + + outlet_float(x->outlet1, x->min); + outlet_float(x->outlet2, x->max); +} + +void streamMinMax_bang(t_streamMinMax *x) +{ + //x->i_count = x->i_down; + x->reset = 1; + +} + +void streamMinMax_list(t_streamMinMax *x,t_symbol *s, int argc, t_atom *argv) +{ + + if (argc >= 2) { + float a = atom_getfloat(argv+1); + float b = atom_getfloat(argv); + if (a > b ) { + x->max=a; + x->min=b; + } else { + x->max=b; + x->min=a; + } + x->reset = 0; + } + +} + +static void streamMinMax_free(t_streamMinMax *x) +{ + + +} + +void *streamMinMax_new(t_symbol *s, int argc, t_atom *argv) +{ + t_streamMinMax *x = (t_streamMinMax *)pd_new(streamMinMax_class); + + x->reset = 1; + + streamMinMax_list(x,&s_list,argc,argv); + + + + //inlet_new(&x->x_obj, &x->x_obj.ob_pd, + // gensym("list"), gensym("bound")); + + //floatinlet_new(&x->x_obj, &x->step); + + x->outlet1 = outlet_new(&x->x_obj, &s_float); + x->outlet2 = outlet_new(&x->x_obj, &s_float); + //x->b_out = outlet_new(&x->x_obj, &s_bang); + + return (void *)x; +} + +void streamMinMax_setup(void) { + streamMinMax_class = class_new(gensym("streamMinMax"), + (t_newmethod)streamMinMax_new, + (t_method)streamMinMax_free, sizeof(t_streamMinMax), + CLASS_DEFAULT, + A_GIMME, 0); + + class_addbang (streamMinMax_class, streamMinMax_bang); + class_addfloat (streamMinMax_class, streamMinMax_float); + class_addlist (streamMinMax_class, streamMinMax_list); + /* + class_addmethod(streamMinMax_class, + (t_method)streamMinMax_reset, gensym("reset"), 0); + class_addmethod(streamMinMax_class, + (t_method)streamMinMax_set, gensym("set"), + A_DEFFLOAT, 0); + class_addmethod(streamMinMax_class, + (t_method)streamMinMax_bound, gensym("bound"), + A_DEFFLOAT, A_DEFFLOAT, 0); + + class_sethelpsymbol(streamMinMax_class, gensym("help-streamMinMax")); + */ +} -- cgit v1.2.1