From 7312e58d17e331d71d4f47e21bf15499609bace8 Mon Sep 17 00:00:00 2001 From: dieter kovacic Date: Tue, 9 Jul 2002 12:41:56 +0000 Subject: This commit was generated by cvs2svn to compensate for changes in r33, which included commits to RCS files with non-trunk default branches. svn path=/trunk/externals/ext13/; revision=34 --- throw13~.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 throw13~.c (limited to 'throw13~.c') diff --git a/throw13~.c b/throw13~.c new file mode 100644 index 0000000..347953e --- /dev/null +++ b/throw13~.c @@ -0,0 +1,84 @@ +/* Copyright (c) 1997-1999 Miller Puckette source modified by dieb13. +* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ + +/* catch13~ ... = original objects with set-message for changing - bad hack - but works somehow*/ + +#include "m_pd.h" +#include "d_global13.h" + +#define DEFSENDVS 64 /* LATER get send to get this from canvas */ + +/* ----------------------------- throw13~ ----------------------------- */ + + void *sigthrow13_new(t_symbol *s) +{ + t_sigthrow13 *x = (t_sigthrow13 *)pd_new(sigthrow13_class); + if (!*s->s_name) s = gensym("throw13~"); + x->x_sym = s; + x->x_whereto = 0; + x->x_n = DEFSENDVS; + return (x); +} + + t_int *sigthrow13_perform(t_int *w) +{ + t_sigthrow13 *x = (t_sigthrow13 *)(w[1]); + t_float *in = (t_float *)(w[2]); + int n = (int)(w[3]); + t_float *out = x->x_whereto; + if (out) + { + while (n--) + *out++ += *in++; + } + return (w+4); +} + + void sigthrow13_set(t_sigthrow13 *x, t_symbol *s) +{ + t_sigcatch13 *catcher = (t_sigcatch13 *)pd_findbyclass((x->x_sym = s), + sigcatch13_class); + if (catcher) + { + if (catcher->x_n == x->x_n) + x->x_whereto = catcher->x_vec; + else + { + pd_error(x, "throw13~ %s: vector size mismatch", x->x_sym->s_name); + x->x_whereto = 0; + } + } + else + { + pd_error(x, "throw13~ %s: no matching catch", x->x_sym->s_name); + x->x_whereto = 0; + } +} + + void sigthrow13_dsp(t_sigthrow13 *x, t_signal **sp) +{ + if (sp[0]->s_n != x->x_n) + { + pd_error(x, "throw13~ %s: vector size mismatch", x->x_sym->s_name); + } + else + { + sigthrow13_set(x, x->x_sym); + dsp_add(sigthrow13_perform, 3, + x, sp[0]->s_vec, sp[0]->s_n); + } +} + +void sigthrow13_setup(void) +{ + sigthrow13_class = class_new(gensym("throw13~"), (t_newmethod)sigthrow13_new, 0, + sizeof(t_sigthrow13), 0, A_DEFSYM, 0); + class_addcreator((t_newmethod)sigthrow13_new, gensym("t13~"), A_DEFSYM, 0); + class_addmethod(sigthrow13_class, (t_method)sigthrow13_set, gensym("set"), + A_SYMBOL, 0); + class_addmethod(sigthrow13_class, nullfn, gensym("signal"), 0); + class_addmethod(sigthrow13_class, (t_method)sigthrow13_dsp, gensym("dsp"), 0); +} + + -- cgit v1.2.1