From a7e6303e3e7e87bf90b21821d2e419ed4799783c Mon Sep 17 00:00:00 2001 From: musil Date: Fri, 28 Jun 2013 17:25:22 +0000 Subject: initial check in of double precision library of iem svn path=/trunk/externals/iem/iem_dp/; revision=17167 --- src/print~~.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100755 src/print~~.c (limited to 'src/print~~.c') diff --git a/src/print~~.c b/src/print~~.c new file mode 100755 index 0000000..ceb17b5 --- /dev/null +++ b/src/print~~.c @@ -0,0 +1,99 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iem_dp written by IOhannes m zmoelnig, Thomas Musil, Copyright (c) IEM KUG Graz Austria 1999 - 2007 */ +/* double precision library */ + +#include "m_pd.h" +#include "iemlib.h" +#include "iem_dp.h" + +/* -------------------------- print~~ ------------------------------ */ +/* based on miller's print~ which is part of pd */ + +static t_class *print_tilde_tilde_class; + +typedef struct _print_tilde_tilde +{ + t_object x_obj; + t_float x_f; + t_symbol *x_sym; + int x_count; +} t_print_tilde_tilde; + +static void *print_tilde_tilde_new(t_symbol *s) +{ + t_print_tilde_tilde *x = (t_print_tilde_tilde *)pd_new(print_tilde_tilde_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); + x->x_sym = (s->s_name[0] ? s : gensym("print~~")); + x->x_count = 0; + x->x_f = 0; + return(x); +} + +static t_int *print_tilde_tilde_perform(t_int *w) +{ + t_print_tilde_tilde *x = (t_print_tilde_tilde *)(w[1]); + t_sample *inc = (t_sample *)(w[2]); + t_sample *inf = (t_sample *)(w[3]); + int n = (int)(w[4]); + + if(x->x_count) + { + post("%s:", x->x_sym->s_name); + while(n >= 4) + { + post("%-20.14g %-20.14g %-20.14g %-20.14g", iem_dp_calc_sum(inc[0], inf[0]), iem_dp_calc_sum(inc[1], inf[1]), + iem_dp_calc_sum(inc[2], inf[2]), iem_dp_calc_sum(inc[3], inf[3])); + n -= 4; + inc += 4; + inf += 4; + } + if(n) + { + if(n == 3) + { + post("%-20.14g %-20.14g %-20.14g", iem_dp_calc_sum(inc[0], inf[0]), iem_dp_calc_sum(inc[1], inf[1]), + iem_dp_calc_sum(inc[2], inf[2])); + } + else if(n == 2) + { + post("%-20.14g %-20.14g", iem_dp_calc_sum(inc[0], inf[0]), iem_dp_calc_sum(inc[1], inf[1])); + } + else if(n == 1) + { + post("%-20.14g", iem_dp_calc_sum(inc[0], inf[0])); + } + } + x->x_count--; + } + return(w+5); +} + +static void print_tilde_tilde_float(t_print_tilde_tilde *x, t_floatarg f) +{ + if(f < 0) + f = 0; + x->x_count = f; +} + +static void print_tilde_tilde_bang(t_print_tilde_tilde *x) +{ + x->x_count = 1; +} + +static void print_tilde_tilde_dsp(t_print_tilde_tilde *x, t_signal **sp) +{ + dsp_add(print_tilde_tilde_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} + +void print_tilde_tilde_setup(void) +{ + print_tilde_tilde_class = class_new(gensym("print~~"), (t_newmethod)print_tilde_tilde_new, 0, + sizeof(t_print_tilde_tilde), 0, A_DEFSYM, 0); + CLASS_MAINSIGNALIN(print_tilde_tilde_class, t_print_tilde_tilde, x_f); + class_addmethod(print_tilde_tilde_class, (t_method)print_tilde_tilde_dsp, gensym("dsp"), 0); + class_addbang(print_tilde_tilde_class, print_tilde_tilde_bang); + class_addfloat(print_tilde_tilde_class, print_tilde_tilde_float); +} -- cgit v1.2.1