aboutsummaryrefslogtreecommitdiff
path: root/src/streamMinMax.c
diff options
context:
space:
mode:
authorThomas O Fredericks <mrtof@users.sourceforge.net>2009-06-19 17:00:34 +0000
committerThomas O Fredericks <mrtof@users.sourceforge.net>2009-06-19 17:00:34 +0000
commite0267013c4de07cf495b4488a66181e4027d88a4 (patch)
tree750de46dd8d97625f4ff902ca6edbe1fd701ecc9 /src/streamMinMax.c
parentd285825bc8d34f791f3adc07caa836457b66b7bd (diff)
Added a few externals to tof
svn path=/trunk/externals/tof/; revision=11801
Diffstat (limited to 'src/streamMinMax.c')
-rw-r--r--src/streamMinMax.c107
1 files changed, 107 insertions, 0 deletions
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"));
+ */
+}