From 1bf4d7a1b6b170eef35ce6a9113cc8348be77f76 Mon Sep 17 00:00:00 2001 From: Ivica Ico Bukvic <ico@vt.edu> Date: Sun, 24 Nov 2013 21:42:13 -0500 Subject: [PATCH] added forward mess patch by Jonathan Wilkes that enhances in-patch interaction (think: prancing ponies patch demo) --- pd/src/g_canvas.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c index 6152c5f19..3f56a7f4f 100644 --- a/pd/src/g_canvas.c +++ b/pd/src/g_canvas.c @@ -1280,6 +1280,29 @@ static void canvas_rename_method(t_canvas *x, t_symbol *s, int ac, t_atom *av) else canvas_rename(x, gensym("Pd"), 0); } +static int forwardmess_recurse = 0; + +static void canvas_forwardmess(t_canvas *x, t_symbol *s, int ac, t_atom *av) +{ + if (av[0].a_type != A_FLOAT) + { + pd_error(x, "error: canvas: forwardmess: need object index"); + return; + } + t_int indexno = (t_int)atom_getfloatarg(0, ac--, av++); + if (indexno < 0) indexno = 0; + t_gobj *y; + t_int i; + for (i = 0, y = x->gl_list; y && i < indexno; i++) + y = y->g_next; + if (!y) return; + if (forwardmess_recurse++ < 1) + pd_forwardmess((t_pd *)y, ac, av); + else + pd_error(y, "error: canvas: forwardmess can't be in a recursive loop"); + forwardmess_recurse = 0; +} + /* ------------------ table ---------------------------*/ static int tabcount = 0; @@ -2150,6 +2173,8 @@ void g_canvas_setup(void) class_addmethod(canvas_class, (t_method)canvas_dsp, gensym("dsp"), 0); class_addmethod(canvas_class, (t_method)canvas_rename_method, gensym("rename"), A_GIMME, 0); + class_addmethod(canvas_class, (t_method)canvas_forwardmess, + gensym("forwardmess"), A_GIMME, 0); /*---------------------------- tables -- GG ------------------- */ -- GitLab